私はPython 2.7.2とwxPython 2.8.12.1をArch Linux x86_64に使用しています。wxPython:メニューキーのショートカットと動的な無効化の範囲
私は次の例では、このように動作したいのですが:
* Shift+A
を押すことにより、焦点を当てている(text_A
)TextCtrlを去ったとき、それはdo_A()
を実行しなければならない、とShift+B
を押すことによって、それがテキスト領域にB
を書く必要があります。また、右TextCtrl(text_B
)はフォーカスがあるとき
*は、Shift+A
を押すことによって、それがテキスト領域にA
を書くべき、とShift+B
を押すことによって、それがdo_B()
を実行する必要がありmenu.foo.bar_B
を無効にする必要があります(とmenu.foo.bar_A
は有効)。また、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アプリケーションがメニューショートカットキーの範囲を制限し、メニュー項目を動的に有効/無効にする適切な(最も頻繁に、きれいで整然とした)方法を知りたいのですが、
ありがとうございました!
これらの参考文献のおかげで、実際に私がしたいことのための最も興味深い部分は、おそらく 'wxUpdateUIEvent'に言及しているあなたの記事の最後の* Update *部分です。それを使用することを学ぶ?簡単なGoogleの検索の後、私は多くを見つけることができませんでした... – kynikos
私はそれほど多くを使用していません。私はwxPythonデモかメーリングリストのいずれかからそれを得たと思います。お気軽にお尋ねください。 –