我可以使用以下代码轻松定义我的问题:
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函数,我只会在用户单击"关于"菜单时发生这种情况.
你为什么不直接使用菜单项绑定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)