如何正确绑定 wx.MenuItems 未存储在变量中
How to Correctly Bind wx.MenuItems not stored in a variable
前提:
我正在创建一个小 wx.Frame,如果我有一个 wx.SubMenu,可变数量 wx.MenuItems,我想将它们绑定到一个方法,所以我使用了这个代码:
self.selectworkout = wx.Menu()
self.x = 110
y = []
for elem in self.workout_list:
y.append(self.selectworkout.Append(int(self.x), elem.title, elem.title + " | " + elem.description))
index = self.workout_list.index(elem)
self.Bind(wx.EVT_MENU, lambda event: self.OnSelectWorkout(event, elem), y[index])
self.x+=1
为了获得指向 wx.MenuItems 的指针,我将它们存储在一个列表中,然后使用对应的列表项绑定它们
问题:
问题是,当我点击它们时,调用了方法,但它们传递了相同的参数,就像我绑定了相同的 wx.MenuItem
问题:
你知道问题出在哪里吗?或者什么是做我需要的最佳方法?
的问题
self.Bind(wx.EVT_MENU, lambda event: self.OnSelectWorkout(event, elem), y[index])
是lambda
表达式中的elem
实际上是来自周围函数的变量。如果它被 for 循环更改,它会为所有创建的 lambda 更改。
简单的解决方案:将其更改为:
self.Bind(wx.EVT_MENU, lambda event, elem=elem: self.OnSelectWorkout(event, elem), y[index])
前提:
我正在创建一个小 wx.Frame,如果我有一个 wx.SubMenu,可变数量 wx.MenuItems,我想将它们绑定到一个方法,所以我使用了这个代码:
self.selectworkout = wx.Menu()
self.x = 110
y = []
for elem in self.workout_list:
y.append(self.selectworkout.Append(int(self.x), elem.title, elem.title + " | " + elem.description))
index = self.workout_list.index(elem)
self.Bind(wx.EVT_MENU, lambda event: self.OnSelectWorkout(event, elem), y[index])
self.x+=1
为了获得指向 wx.MenuItems 的指针,我将它们存储在一个列表中,然后使用对应的列表项绑定它们
问题:
问题是,当我点击它们时,调用了方法,但它们传递了相同的参数,就像我绑定了相同的 wx.MenuItem
问题:
你知道问题出在哪里吗?或者什么是做我需要的最佳方法?
self.Bind(wx.EVT_MENU, lambda event: self.OnSelectWorkout(event, elem), y[index])
是lambda
表达式中的elem
实际上是来自周围函数的变量。如果它被 for 循环更改,它会为所有创建的 lambda 更改。
简单的解决方案:将其更改为:
self.Bind(wx.EVT_MENU, lambda event, elem=elem: self.OnSelectWorkout(event, elem), y[index])