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

2024-10-01 00:18:19 发布

您现在位置: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个按钮的情况下完成这项工作吗


Tags: 代码inselfuiforbutton标签按钮
1条回答
网友
1楼 · 发布于 2024-10-01 00:18:19

你差点就成功了。您的lambda缺少处理此问题所需的部分:

更改此项:

lambda: self.addSubtract(i)

为此:

lambda x=i: self.addSubtract(x)

我们之所以需要这样做,是因为lambda是如何执行的。 此函数在被调用之前不会计算指定的变量

为了解决这个问题,我们在创建变量时,通过将其分配给lambda中的另一个变量,强制它对变量求值

相关问题 更多 >