tkinter python 3中的自创建按钮

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

我的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”的标签

有人知道为什么它不起作用吗?

python button tkinter
1个回答
0
投票

这不起作用,因为对于您创建的所有ilambda都将使用其最后一个值1,因为直到调用函数体才会执行该函数体。如果i允许,则可以将lambda作为参数传递给Tkinter以解决此问题,但事实并非如此。所以你应该这样做:

from functools import partial
...

Button(root, text=Button_name, bg='white', command=partial(show_player, liste, i)).pack()
© www.soinside.com 2019 - 2024. All rights reserved.