我怎样才能使我的For循环将按钮的索引保存在另一个变量中?

时间:2019-02-15 16:14:44

标签: python arrays tkinter

我定义了2个变量。第一个完美显示了我在Global Array播放器中带有人名的所有按钮。

我将命令行添加到我的Button中,该按钮应该在单击后激活我的第二个def变量。第二个变量应保存Buttons索引或Text(均尝试),然后使用print来显示应显示的内容保存后再继续前进。

现在这是问题所在。

当我单击它时,它只显示一个空数组。我尝试使用[i]而不是text分配给Buttons的btn等其他内容,并且由于无法在第二个函数中使用非全局变量,所以尝试在某一时刻对btn进行全局设置没有帮助。我读了有关partials和Lambda的文章,但我无法理解需要添加/更改才能继续进行的部分。

这是我的代码:

players=['x','y','z']

players_to_random=[]

def showButtons():
    for i in players:
        btn = Button(window, text=i, command=onclick)
        btn.pack(side=LEFT)

def onclick():
    players_to_random.append() # tried several things with () and without
    print(players_to_random)

showButtons()

1 个答案:

答案 0 :(得分:1)

您的onclick函数无法知道单击了哪个按钮。您应该将一个参数添加到函数中,并使用command(请参见here)或lambda

将其传递到partial
def showButtons():
    for i in players:
        btn = Button(window, text=i, command=lambda i=i: onclick(i))
        # -- OR THIS (not both) --
        btn = Button(window, text=i, command=functools.partial(onclick, i))
        btn.pack(side=LEFT)

def onclick(player):
    players_to_random.append(player)
    print(players_to_random)