将事件绑定到wx.Menu()而不是绑定到wxPython中的菜单项

Pet*_*rne 1 python wxpython

我可以使用以下代码轻松定义我的问题:

self.Bind(wx.EVT_MENU_OPEN, self.OnAbout)
Run Code Online (Sandbox Code Playgroud)

这意味着当我点击MenuBar中的任何wx.Menu()时,会调用函数'onAbout()'.如何将此事件绑定到名为wx.MenuAbout()的特定wx.Menu()?

如果您感觉更有帮助,也许您可​​以向我提供事件处理程序文档的链接.我可以找到事件处理函数的文档,但不能找到实际的事件处理程序(例如wx.EVT_MENU).

类似的问题,但我不打算将一系列wx.Menu()绑定到事件:是否可以将事件绑定到菜单而不是wxPython中的菜单项?

编辑:理想情况下,这是我希望能够做到的:

menuAbout = wx.Menu()
self.Bind(wx.EVT_MENU, self.OnAbout, id=menuAbout.GetId())
Run Code Online (Sandbox Code Playgroud)

结果是.menuBar()中的任何其他项(例如:File,Edit,Tools)都可以作为普通菜单使用,但"About"的工作方式类似于可点击链接.

使用wx.EVT_MENU_OPEN意味着可以打开文件菜单,然后当鼠标悬停在'about'上时,会调用self.OnAbout函数,我只会在用户单击"关于"菜单时发生这种情况.

Mat*_*ieu 5

你为什么不直接使用菜单项绑定EVT_MENU

EVT_MENU_OPEN任何菜单打开后都会立即开火.话虽这么说,如果那是你真正想要的,你可以随时这样做:

您定义菜单的位置:

self.about_menu = wx.Menu()  # or whatever inherited class you have
self.Bind(wx.EVT_MENU_OPEN, self.on_menu_open)
Run Code Online (Sandbox Code Playgroud)

然后你的回调:

def on_menu_open(self, event):
    if event.GetMenu()==self.about_menu:
         #do something
Run Code Online (Sandbox Code Playgroud)