Я использую Python 2.7.2 и wxPython 2.8.12.1 в Arch Linux x86_64.
Я бы хотел, чтобы следующий пример работал следующим образом:
* когда левый TextCtrl (text_A
) имеет фокус, при нажатии Shift+A
он должен выполнить do_A()
, а при нажатии Shift+B
он должен написать B
в текстовой области; также menu.foo.bar_B
должно быть отключено (и menu.foo.bar_A
включено)
* когда правый TextCtrl (text_B
) имеет фокус, при нажатии Shift+A
он должен написать A
в текстовой области, а при нажатии Shift+B
он должен выполнить do_B()
; также menu.foo.bar_A
следует отключить (и menu.foo.bar_B
включить)
import wx
class Foo(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(600, 480))
self.init_menu()
self.init_text()
self.Centre()
self.Show(True)
def init_menu(self):
self.menu = wx.MenuBar()
self.SetMenuBar(self.menu)
self.menu.foo = wx.Menu()
self.menu.Append(self.menu.foo, "&Foo")
self.menu.foo.bar_A = self.menu.foo.Append(wx.ID_ANY, "Bar&A\tShift+A")
self.menu.foo.bar_B = self.menu.foo.Append(wx.ID_ANY, "Bar&B\tShift+B")
self.Bind(wx.EVT_MENU, self.handle_A, self.menu.foo.bar_A)
self.Bind(wx.EVT_MENU, self.handle_B, self.menu.foo.bar_B)
def init_text(self):
self.box = wx.BoxSizer(wx.HORIZONTAL)
self.SetSizer(self.box)
self.text_A = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.text_B = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.box.Add(self.text_A, 1, flag=wx.EXPAND)
self.box.Add(self.text_B, 1, flag=wx.EXPAND)
def handle_A(self, event):
print('A')
def handle_B(self, event):
print('B')
app = wx.App()
Foo()
app.MainLoop()
Привязка к событию меню с чем-то вроде self.text_A.Bind(wx.EVT_MENU, self.handle_A, self.menu.foo.bar_A)
вообще не работает.
Должен ли я использовать wx.EVT_KILL_FOCUS
и wx.EVT_SET_FOCUS
для привязки / отмены привязки пунктов меню, установки / сброса сочетаний клавиш и включения / отключения записей меню? Это кажется сложным для больших приложений, в общем, я хотел бы знать, как правильно (чаще всего, чисто и аккуратно), как приложения wxPython ограничивают область сочетаний клавиш и динамически включают / отключают пункты меню.
Спасибо!