在右键单击弹出窗口中有大约5-6个菜单项,并且将它们绑定到单独的方法看起来很笨拙,因为可以重复使用大量代码,是否可以执行此类操作?
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu1)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu2)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu3)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu4)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu5)
def MenuClicked(self, event):
detect which menu being clicked
assign specific values to several variables regarding the menu being clicked
rest of the codes.
我注意到GetMenu()
没有wx.EVT_MENU
可用,所以基本上你如何识别点击了哪个菜单?
答案 0 :(得分:2)
我喜欢将它们绑定到单独的方法,但每个方法都有自己的:) 您可以对事件使用GetId()方法,然后将其与菜单项进行比较。
def MenuClicked(self, event):
id_selected = event.GetId()
答案 1 :(得分:0)
有很多方法可以做到这一点,但标准和通用方法是使用functools.partial
:
f = functools.partial(self.MenuClicked, my_id_1)
self.Bind(wx.EVT_MENU, f, id=self.menu1)
其中my_id_1
是一些标识符,如果你愿意,可能是self.menu1,然后是其他地方:
def MenuClicked(self, my_id, evt):
print my_id