子供がいないメニューバーの項目のクリックをキャプチャする方法はありませんか?wxトップレベルのメニューバーイベント(Python)
I.e.メニュー構造で
- ファイル
- 保存
- は私が保存したり、終了した項目をクリックするためにイベントをキャプチャすることができていますが、どのようにわからないよ
- スパム
を終了します私はスパムをクリックしてイベントをキャプチャできます
子供がいないメニューバーの項目のクリックをキャプチャする方法はありませんか?wxトップレベルのメニューバーイベント(Python)
I.e.メニュー構造で
を終了します私はスパムをクリックしてイベントをキャプチャできます
@uhzソリューションはほとんど動作しますが、私はそれをお勧めしません。クリック可能なトップレベルメニュー項目が許可されていない理由がなければなりません。私の環境(Debian、wx 2.8)の下では、彼のソリューションは、アイテムをホバリングすることによってイベントをトリガするような、奇妙な動作を起こします。
あなたはusecaseツールバーのほうがいいです、私はここで使うことをお勧めします。もう一度、よく慣れていない場合は、examples at zetcode(セクションツールバー)の外観を提案することができます。
私はファイルとスパムがトップメニュー項目であると理解しています。 Windowsでは、たとえば、wx.EVT_MENU_OPEN
およびフィルタイベントを使用して試みることができる:
import wx
from wx.lib.mixins.inspection import InspectionMixin
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
menuBar = wx.MenuBar()
fileMenu = wx.Menu()
fileMenu.Append(wx.ID_ANY, "Save")
fileMenu.Append(wx.ID_ANY, "Quit")
menuBar.Append(fileMenu, "File")
self.__spamMenu = wx.Menu()
menuBar.Append(self.__spamMenu, "Spam")
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_MENU_OPEN, self.__onSpamOpen)
def __onSpamOpen(self, event):
if event.GetMenu() != self.__spamMenu:
return event.Skip()
print "Spam clicked"
class MyMenuApp(wx.App, InspectionMixin):
def OnInit(self):
self.Init()
frame = MyFrame(None, wx.ID_ANY, 'Frame Window Demo')
frame.Show(True)
self.SetTopWindow(frame)
return True
if __name__ == "__main__":
app = MyMenuApp(0)
app.MainLoop()
これは、Python 2.6とwxPythonをで動作2.9.3.1
回避策を試してみるといいですが、これはうまくいかない方法です。なぜこのソリューションが実際にうまく機能していないのか、私の答えを見てください。環境を使用して異なる動作に遭遇しましたか? – phineas
Windowsでそれは完全に正しく動作します – uhz
私はこれを最初に試しました。 – Hugoagogo