我试图在Tkinter中使用GUI按钮,并且在尝试使用它们时遇到问题。这段代码应该(至少我期望如此)生成一些按钮,单击这些按钮可以打印出所显示的字母。但是,无论按下哪个按钮,它始终会打印出最后生成的按钮的结果。我应该使用类似的功能吗?
import tkinter
win = tkinter.Tk()
players = ["A","B","C","D"]
for p in players:
playerBtn = tkinter.Button(win,text=p,command=lambda : print(p))
playerBtn.pack()
tkinter.mainloop()
答案 0 :(得分:1)
之所以会这样,是因为lambda
只是查找p
的全局值。要进行更改,我们将执行以下操作-
import tkinter
win = tkinter.Tk()
players = ["A","B","C","D"]
for p in players:
player_button = tkinter.Button(win, text=p, command=lambda button_text=p: print(button_text))
player_button.pack()
tkinter.mainloop()
在Ubuntu 18.04上进行了测试,它可以按您的意愿工作。
有关此行为的更多详细信息,请参见this SO帖子。