我正在使用Python在Python中创建简单的UI,其中有5个类似的按钮,上面带有不同的标签。为了使代码更短一些,我在循环中创建了这样的按钮:
self.btntext = ["-10mm", "-1mm", "Stop", "+1mm", "+10mm"]
self.ctrButtons = []
for i in self.btntext:
self.ctrButtons.append(tk.Button(self.buttonFrame, text=i, command= lambda: self.addSubtract(i)))
我认为它将当前按钮文本传递给 addSubtract 函数,但始终将其传递给 btntext 的最后一个元素。
为什么这样工作?我可以在不单独添加5个按钮的情况下完成这项工作吗?
答案 0 :(得分:1)
您几乎拥有了它。您的lambda缺少解决此问题所需的部分:
更改此:
lambda: self.addSubtract(i)
对此:
lambda x=i: self.addSubtract(x)
之所以需要这样做,是因为lambda的执行方式。 该函数在调用之前不会评估分配的变量。
为解决此问题,我们在创建变量时通过将其分配给lambda中的另一个变量来强制其对变量进行评估。