我正在使用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个按钮的情况下完成这项工作吗
你差点就成功了。您的lambda缺少处理此问题所需的部分:
更改此项:
为此:
我们之所以需要这样做,是因为lambda是如何执行的。 此函数在被调用之前不会计算指定的变量
为了解决这个问题,我们在创建变量时,通过将其分配给lambda中的另一个变量,强制它对变量求值
相关问题 更多 >
编程相关推荐