[我试图通过for循环在屏幕上制作许多按钮。我使用lambda调用带有参数的函数。但是我无法为每个按钮提供不同的参数。所以我需要知道为什么会这样。有什么解决方案。 tkinter是否为这些按钮使用相同的RAM缓存?如果是这样,我试图给这些按钮提供不同的名称和另一个列表,但是问题是相同的。感谢您已经回答。.
from tkinter import *
def printmyvalue(value):
print(value)
app = Tk()
test_list = []
for i in range(10):
test_list.append(Button(app,text=str(i+1),command=lambda : printmyvalue(i)))
test_list[i].grid(row=i)
app.mainloop()
这个问题很多次了,所以你可以找到它。
command=lambda args=i:printmyvalue(args)
在您的版本中,lambda:printmyvalue(i)
不会将值从i
复制到函数lambda
,但会保留对变量i
使用的内存的引用。因此,所有按钮都引用相同的内存。当您单击按钮时,它将从该内存中获取值,但该内存中的值是循环中使用的最后一个值-因此所有按钮都将使用最后一个值。
使用lambda args=i:
在每个args
中创建新变量lamba
,并将值从i
复制到args - so every
lambda`使用具有不同值的不同变量。