通过“命令”属性使用Button传递变量

时间:2019-09-17 12:36:28

标签: python tkinter

我正在使用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个按钮的情况下完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

您几乎拥有了它。您的lambda缺少解决此问题所需的部分:

更改此:

lambda: self.addSubtract(i)

对此:

lambda x=i: self.addSubtract(x)

之所以需要这样做,是因为lambda的执行方式。 该函数在调用之前不会评估分配的变量。

为解决此问题,我们在创建变量时通过将其分配给lambda中的另一个变量来强制其对变量进行评估。