我想在一个for循环中,在Tkinter中创建多个按钮。问题是我用.iterrows遍历一个数据帧(行中的值是我创建的Tkinter gadets的内容),这意味着,我没有“I”,只有行和索引。在
问题是,当我创建按钮并用lambda I给它们不同的命令时:I=SomeFunction(somevariable),这里我必须使用一个变量而不是“I”。结果是这些命令都在末尾引用这个“somevariable”的最后一个值,而不是像创建按钮时那样引用它的值。在
import tkinter
def printout(somevariable):
print(somevariable)
window = tkinter.Tk()
i = 0
somevariable = 0
for index, rows in enumerate(["a","b","c","d"]):
b = tkinter.Button(window,
text=rows,
command= lambda i=i: printout(somevariable))
b.pack()
somevariable = somevariable + 1
window.mainloop()
所有的按钮都包含了“somevariable”的最后一个值。在
你知道怎么做吗??在
免责声明:这个答案是“老”的,因为我试图解决它-但没有,直到Nae发布了重复。要进一步解释发生了什么:
问题是,当你按下按钮时,你的lambda会被计算出来。 {cd1>的值将在此时打印。您可以通过使用Nae' answer在创建lambda时为lambda提供一个
somevariable
的快照来修复somevariable
的当前值,为了使这一点更清楚,我将其重新格式化为:为了明确lambda使用
s
,它在此时取somevariable
的值,当调用时,将打印s
。在完整示例:
^{pr2}$替换:
有:
^{pr2}$相关问题 更多 >
编程相关推荐