0

前提:

我正在创建一个小 wx.Frame,如果我有一个带有可变数量 wx.MenuItems 的 wx.SubMenu,并且我想将它们绑定到一个方法,所以我使用了以下代码:

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

问题:

你知道问题出在哪里或做我需要的最佳方法是什么?

4

1 回答 1

1

问题与

self.Bind(wx.EVT_MENU, lambda event: self.OnSelectWorkout(event, elem), y[index])

是表达式中elemlambda实际是来自周围函数的变量。如果它被 for 循环更改,它会为所有创建的 lambdas 更改。

简单的解决方案:将其更改为:

self.Bind(wx.EVT_MENU, lambda event, elem=elem: self.OnSelectWorkout(event, elem), y[index])
于 2020-12-13T12:38:33.853 回答