Рубрики
Без рубрики

WXPYPHON: ярлыки клавиатуры (ускорители)

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Почти любой пользователь компьютерной мощности захочет использовать сочетания клавиш (ака: ускорителей), чтобы выполнить свою работу. К счастью для нас, WXPYPHON обеспечивает способ выполнить это очень легко, используя таблицу ускорителя через WX.Acceleratortable Class. В этой статье мы посмотрим на пару примеров, чтобы увидеть, как это достигнуто.

Начиная

Для нашего первого трюка мы начнем с действительно простого примера. Проверьте код ниже!

import wx
 
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial", size=(500,500))
 
        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        randomId = wx.NewId()
        self.Bind(wx.EVT_MENU, self.onKeyCombo, id=randomId)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord('Q'), randomId )])
        self.SetAcceleratorTable(accel_tbl)
        
    #----------------------------------------------------------------------
    def onKeyCombo(self, event):
        """"""
        print "You pressed CTRL+Q!"
        
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Код выше – это просто панель с wx.ceceleratortable Объект, который содержит одну комбинацию клавиш с ярлыком, а именно Ctrl + Q. Сочетания клавиш в WXPYPHON на самом деле меню события (I.E. WX.EVT_MENU), вероятно, потому что ярлыки обычно также являются пункт меню. Таким образом, они полагаются на какой-то идентификатор. Если у нас был пункт меню, который мы хотели дать ярлык, мы бы использовали идентификатор элемента меню. Здесь мы просто создаем новый идентификатор. Обратите внимание, что мы должны использовать wx.caccel_ctrl Для «поймать» Ctrl KeyPress. Наконец, после создания WX.Acceleratortable, нам нужно добавить его в WX.Frame, вызывая объект кадров Setacceleratortable Метод и прохождение в экземпляре акселертируемых. Фу! Вы все это получили? Хорошо! Давайте продолжим тогда.

Узнав о нескольких ярлыках и больше

В этом примере мы узнаем, как добавить несколько ярлыков клавиатуры, и мы также узнаем о том, как создать многоключевую ярлык. Давайте взглянем:

import wx
 
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")

        panel = wx.Panel(self, wx.ID_ANY)
        
        # Create a menu
        menuBar = wx.MenuBar()
        fileMenu = wx.Menu()
        
        refreshMenuItem = fileMenu.Append(wx.NewId(), "Refresh",
                                          "Refresh app")
        self.Bind(wx.EVT_MENU, self.onRefresh, refreshMenuItem)
        
        exitMenuItem = fileMenu.Append(wx.NewId(), "E&xit\tCtrl+X", "Exit the program")
        self.Bind(wx.EVT_MENU, self.onExit, exitMenuItem)
        
        menuBar.Append(fileMenu, "File")
        self.SetMenuBar(menuBar)
        
        # Create an accelerator table
        xit_id = wx.NewId()
        yit_id = wx.NewId()
        self.Bind(wx.EVT_MENU, self.onAltX, id=xit_id)
        self.Bind(wx.EVT_MENU, self.onShiftAltY, id=yit_id)
        
        self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('R'), refreshMenuItem.GetId()),
                                              (wx.ACCEL_ALT, ord('X'), xit_id),
                                              (wx.ACCEL_SHIFT|wx.ACCEL_ALT, ord('Y'), yit_id)
                                             ])
        self.SetAcceleratorTable(self.accel_tbl)
        
    #----------------------------------------------------------------------
    def onRefresh(self, event):
        print "refreshed!"
        
    #----------------------------------------------------------------------
    def onAltX(self, event):
        """"""
        print "You pressed ALT+X!"
        
    #----------------------------------------------------------------------
    def onShiftAltY(self, event):
        """"""
        print "You pressed SHIFT+ALT+Y!"
        
    #----------------------------------------------------------------------
    def onExit(self, event):
        """"""
        self.Close()

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

В этом примере мы создаем супер простое меню с одним пунктом меню. Как вы можете видеть, мы используем идентификатор элемента меню обновления, когда мы создаем ярлык в таблице акселератора. Мы также связываем элемент меню к тому же обработчику событий. Два других пункта в таблице акселератора связаны так же, как и раньше. Однако обратите внимание, что последний элемент в таблице как два флага: wx.cel_shift и wx.cel_alt. Что это обозначает? Это означает, что нам придется прессовать Shift + Alt + Swimekey, чтобы выстрелить событие. В этом случае ключ, который мы хотим, это «Y».

Если вы платили пристальное внимание, вы заметили, что есть пункт меню выхода, который утверждает, что если вы нажмете Ctrl + X, приложение закроется. Однако у нас нет этого ярлыка в нашем столе ускорителя. К счастью для нас, WXPYPHON сделает этот ярлык автоматически из-за того, как он добавляется в пункт меню: «\ TCTRL + X». «\ T» – это символ вкладок (если вы не знаете) и из-за этого он говорит WxPython разбирать, что приходит после нее и добавьте его на таблицу акселератора. Разве это не аккуратно?

ПРИМЕЧАНИЕ. Я не смог подтвердить, добавляет ли WxPython, добавляет ли WXPYPHON TORCUT на отдельную таблицу ускорителя или, если он добавляет его к одному программисту, но это не имеет значения, так как он «просто работает».

Обертывание

К настоящему времени вы должны знать, как создавать ярлыки клавиатуры в Wxpython. Поздравляю! Ты гораздо ближе к созданию прохладного приложения! Я много использую ярлыки клавиатуры и очень ценю его, когда приложение имеет хорошие, интуитивные ярлыки, которые легко запомнить. Если вы тоже клавиатура, то вы узнаете, что я имею в виду. Повеселись!

Дальнейшее чтение

Примечание. Этот код был протестирован на Windows с Python 2.5.4 и WxPython 2.8.10.1