1

子を使わずにメニューバーの項目のクリックをキャプチャする方法はwxPythonにありますか?

つまり、メニュー構造

  • ファイル
    • 保存する
    • 終了する
  • スパム

保存または終了アイテムをクリックするためのイベントをキャプチャすることはできますが、スパムをクリックするためのイベントをキャプチャする方法がわかりません

4

2 に答える 2

0

@uhzソリューションはほとんど機能しますが、お勧めしません。クリック可能なトップレベルのメニュー項目が許可されないのには理由があるはずです。私の環境(Debian、wx 2.8)では、彼のソリューションは、アイテムにカーソルを合わせてイベントをトリガーするなど、奇妙な動作をします。
ユースケースはツールバーのユースケースです。ここで使用することをお勧めします。もう一度、zetcode(セクションツールバー)の例に慣れていない場合は、それらの例を見てみることをお勧めします。

于 2012-05-09T14:49:45.423 に答える
0

私が理解しているように、ファイルとスパムはトップメニュー項目です。wx.EVT_MENU_OPENWindowsでは、次のようなイベントの使用とフィルタリングを試すことができます。

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()

これはPython2.6およびwxPython2.9.3.1で機能します

于 2012-05-09T14:06:14.680 に答える