将多个wx.EVT_MENU绑定到同一个方法?

时间:2013-09-01 02:54:16

标签: python user-interface wxpython popupmenu

在右键单击弹出窗口中有大约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可用,所以基本上你如何识别点击了哪个菜单?

2 个答案:

答案 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