Автор оригинала: 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. Поздравляю! Ты гораздо ближе к созданию прохладного приложения! Я много использую ярлыки клавиатуры и очень ценю его, когда приложение имеет хорошие, интуитивные ярлыки, которые легко запомнить. Если вы тоже клавиатура, то вы узнаете, что я имею в виду. Повеселись!
Дальнейшее чтение
- WXPYPHON: Работа с меню, панель инструментов и ускорителей
- WxPython: Ловить ключ и события CHAR
- wx.ceceleratortable документация
- wx.keyevent документация
Примечание. Этот код был протестирован на Windows с Python 2.5.4 и WxPython 2.8.10.1