在Tkinter上,无法在循环中创建带有不同参数的多个按钮

问题描述 投票:0回答:1

[我试图通过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()
python button tkinter lambda arguments
1个回答
0
投票

这个问题很多次了,所以你可以找到它。

command=lambda args=i:printmyvalue(args)

在您的版本中,lambda:printmyvalue(i)不会将值从i复制到函数lambda,但会保留对变量i使用的内存的引用。因此,所有按钮都引用相同的内存。当您单击按钮时,它将从该内存中获取值,但该内存中的值是循环中使用的最后一个值-因此所有按钮都将使用最后一个值。

使用lambda args=i:在每个args中创建新变量lamba,并将值从i复制到args - so every lambda`使用具有不同值的不同变量。

© www.soinside.com 2019 - 2024. All rights reserved.