我正在尝试创建多个按钮,以便每个按钮都将激活相同的功能,但属性会发生变化。可能发生的是,我从for循环中获取的值是它生成的最后一个值。这是代码:
from tkinter import Tk, Button
root = Tk()
root.geometry('500x500')
def add(num):
print(num)
return num + 5
num_list = [1, 2, 3, 4, 5]
for i in range(len(num_list)):
Button(root, text=str(num_list[i]), command=lambda: print(add(num_list[i]))).place(x=350 ,y=250+i*20)
root.mainloop()
在下面的代码中,无论您单击哪个按钮,它将始终发送5作为I的值(最后一个值)。
答案 0 :(得分:2)
您可以仅将一个变量添加到lambda调用中,如下所示:
Button(root, text=str(num_list[i]), command=lambda i=i: print(add(num_list[i]))).place(x=350 ,y=250+i*20)
i = i将使程序按您希望的方式运行,因为它将使函数在创建按钮时采用i的值。