我的tkinter代码有问题。那就是我到目前为止所得到的:
from tkinter import *
root = Tk()
def create_button():
liste = [['Name 1', 'Name 2', 'Name 3'], ['Name 4', 'Name 5', 'Name 6']]
#giving any button a diffrent command by changing the 'group'-parameter from the function show_player
for i in range(len(liste)):
Button_name = 'Group ' + str(i+1)
Button(root, text = Button_name, bg = 'white', command= lambda:[show_player(liste, i)]).pack()
def show_player(list1, group):
for name in list1[group]:
Label(root, text = name).pack()
create_button()
root.mainloop()
不管我按下哪个按钮,我都会获得名称“名称4”,“名称5”,“名称6”,
但是我希望第一个按钮创建名称为“名称1”,“名称2”,“名称3”的标签
有人知道为什么它不起作用吗?
这不起作用,因为对于您创建的所有i
,lambda
都将使用其最后一个值1,因为直到调用函数体才会执行该函数体。如果i
允许,则可以将lambda
作为参数传递给Tkinter
以解决此问题,但事实并非如此。所以你应该这样做:
from functools import partial
...
Button(root, text=Button_name, bg='white', command=partial(show_player, liste, i)).pack()