有没有办法在功能相同但属性不同的for循环中创建按钮?

时间:2020-03-17 23:25:49

标签: python tkinter

我正在尝试创建多个按钮,以便每个按钮都将激活相同的功能,但属性会发生变化。可能发生的是,我从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的值(最后一个值)。

1 个答案:

答案 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的值。