Python 如何使用不同的命令在tkinter上执行多个按钮?

Python 如何使用不同的命令在tkinter上执行多个按钮?,python,tkinter,Python,Tkinter,所以我的问题是在这个程序中,我想创建“x”按钮(x是列表的长度),每个按钮都有列表中元素的名称,并用元素的名称作为参数调用函数“ChoicePage” 例如: 如果我有一个这样的列表,[house,hospital,shop],程序会创建3个按钮:house,hospital和shop,它们通过a=“house”,“hospital”或“shop”调用ChoicePage(a) 这里的问题是,它总是使用列表的最后一个元素调用ChoicePage(在前面的示例中,它将是“shop”) 如何修复此问

所以我的问题是在这个程序中,我想创建“x”按钮(x是列表的长度),每个按钮都有列表中元素的名称,并用元素的名称作为参数调用函数“ChoicePage”

例如: 如果我有一个这样的列表,
[house,hospital,shop]
,程序会创建3个按钮:house,hospital和shop,它们通过a=“house”,“hospital”或“shop”调用ChoicePage(a)

这里的问题是,它总是使用列表的最后一个元素调用ChoicePage(在前面的示例中,它将是“shop”)


如何修复此问题?

当在循环中创建lambda时,它们最终绑定到同一个变量(该变量具有上次循环迭代的值)。可以使用partial将值绑定到函数,也可以使用其他方法在函数中存储值

from functools import partial
for i in range(len(L)):
        a = L[i]
        Button(fen1, text=a, relief=RAISED, command = partial(ChoicePage, a)).pack()
fen1.mainloop()

在循环中创建lambda时,它们最终绑定到同一个变量(该变量具有上一次循环迭代的值)。可以使用partial将值绑定到函数,也可以使用其他方法在函数中存储值

from functools import partial
for i in range(len(L)):
        a = L[i]
        Button(fen1, text=a, relief=RAISED, command = partial(ChoicePage, a)).pack()
fen1.mainloop()

你应该这样称呼lambda:

command=lambda m=a: ChoicePage(var=m) 
其中,
var
应该是
ChoicePage
函数的参数


这样,变量将对应于右按钮存储,您应该这样调用lambda:

command=lambda m=a: ChoicePage(var=m) 
其中,
var
应该是
ChoicePage
函数的参数


通过这种方式,变量将对应右按钮进行存储

偶数
lambda
s可以正确使用。偶数
lambda
s可以正确使用。