如何使For循环将按钮的索引保存在另一个变量中?

2024-04-28 23:06:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我定义了两个变量。第一个很好地向我展示了所有的按钮,上面有我的全局数组播放器中的人的名字

我将命令行添加到我的按钮中,该按钮应该在单击后激活我的第二个def变量。第二个变量应该保存按钮索引或文本(两者都尝试过),然后我使用print来显示它应该保存的内容,然后我才能继续

现在问题来了

当我点击它时,它只显示一个空数组。我试着用其他一些东西,比如[我]来代替文字,分配给按钮的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()

Tags: to命令行定义defrandom数组全局名字
1条回答
网友
1楼 · 发布于 2024-04-28 23:06:35

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

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)

相关问题 更多 >