1

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

4

2 回答 2

2

我更喜欢将它们绑定到单独的方法,但每个方法都有自己的 :) 您可以在事件上使用 GetId() 方法,然后将其与您的菜单项进行比较。

def MenuClicked(self, event):
    id_selected = event.GetId()
于 2013-09-01T12:09:36.850 回答
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
于 2013-09-01T03:31:19.337 回答