我正在用Tkinter学习Python的GUI。
我想创建一个有很多按钮的GUI,每个按钮都有自己的名称和类似的功能(只是参数不同(。
这是我的代码:
from tkinter import *
ALPHABET = ["1", "2", "3"]
class GUI():
def __init__(self):
self.__mainw = Tk()
self.letter_list = []
# I want that every button have own name and command function parameter
for letter in ALPHABET:
self.letter_list.append(Button(self.__mainw, text=letter, command= lambda : self.letter_btm(letter)))
for letter_btm in self.letter_list:
letter_btm.pack()
self.__mainw.mainloop()
def letter_btm(self, letter):
print(letter)
def main():
GUI()
if __name__ == "__main__":
main()
这就是结果。
在此处输入图像描述
每个按钮都打印相同的字母。我知道结果可能是变量引用,但我如何才能得到预期的结果?
按钮1,打印1
按钮2,打印2
按钮3,打印3
我不知道为什么,但这种奇怪的语法似乎有效。与在定义lambda时存储letter的当前值有关,而不是等待稍后查找letter的值。
from tkinter import *
ALPHABET = ["1", "2", "3"]
class GUI:
def __init__(self):
self.__mainw = Tk()
self.letter_list = []
# I want that every button have own name and command function parameter
for letter in ALPHABET:
temp_func = lambda letter=letter: self.letter_btm(letter)
self.letter_list.append(Button(self.__mainw, text=letter, command=temp_func))
print(self.letter_list)
for letter_btm in self.letter_list:
letter_btm.pack()
self.__mainw.mainloop()
def letter_btm(self, letter):
print(letter)
def main():
GUI()
if __name__ == "__main__":
main()