可以使用以下代码轻松定义我的问题:
self.Bind(wx.EVT_MENU_OPEN, self.OnAbout)
这意味着当我点击MenuBar中的任何wx.Menu()时,会调用函数'onAbout()'。如何将此事件绑定到名为wx.MenuAbout()的特定wx.Menu()?
如果您感觉更有帮助,也许您可以向我提供事件处理程序文档的链接。我可以找到事件处理函数的文档,但不能找到实际的事件处理程序(例如wx.EVT_MENU)。
类似的问题,但我不打算将一系列wx.Menu()绑定到事件:Is it possible to bind an event against a menu instead of a menu item in wxPython?
编辑:理想情况下,这是我希望能够做到的:
menuAbout = wx.Menu()
self.Bind(wx.EVT_MENU, self.OnAbout, id=menuAbout.GetId())
结果是.menuBar()中的任何其他项目(例如:文件,编辑,工具)都像普通菜单一样工作,但“关于”就像一个可点击的链接。
使用wx.EVT_MENU_OPEN意味着可以打开文件菜单,然后当鼠标悬停在'about'上时,会调用self.OnAbout函数,我只会在用户单击“关于”时发生什么菜单。
答案 0 :(得分: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)
然后你的回调:
def on_menu_open(self, event):
if event.GetMenu()==self.about_menu:
#do something
答案 1 :(得分:0)
这对我有用:
class myFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "my frame")
#give the Frame a menu bar
self.frame_menubar = wx.MenuBar()
fileMenu = wx.Menu()
self.frame_menubar.Append(fileMenu, "File")
self.rotMenu = wx.Menu()
self.frame_menubar.Append(self.rotMenu, "Rotate")
self.SetMenuBar(self.frame_menubar)
self.Bind(wx.EVT_MENU_OPEN, self.rot)
def rot(self, event):
if event.GetMenu() == self.rotMenu:
print 'rotate clicked'