我正在尝试制作一个按钮,用于打印我向他们提供的值。 在我看来,所有按钮都应在其文本值上打印相同的值。相反,他们都打印" 4"。解决这个问题的正确方法是什么?
from tkinter import *
root = Tk()
def printFunc(text):
print(text)
list=[0,1,2,3,4]
for i in list:
w = Button(root, text=list[i],command=lambda: printFunc(list[i])).pack()
root.mainloop()
答案 0 :(得分:1)
解决方案是提供一个默认值,然后构建lambda
from Tkinter import *
root = Tk()
def printFunc(text):
print(text)
lst=[0,1,2,3,4]
for i in lst:
w = Button(root, text=lst[i],command=lambda x=lst[i]: printFunc(x)).pack()
root.mainloop()
答案 1 :(得分:1)
这是一个非常常见的初学者问题,因为您不了解lambda
的工作原理。解决方案是使用functools.partial
而不是lambda。
from tkinter import *
from functools import partial
root = Tk()
def printFunc(text):
print(text)
list=[0,1,2,3,4]
for i in list:
w = Button(root, text=list[i],command=partial(printFunc, list[i]))
w.pack()
root.mainloop()
此外,始终将pack()
放在新行上,这样可以避免另一个非常常见的初学者问题。