Python,在lambda函数中正确赋值

2024-04-18 15:20:18 发布

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

我正试着做一个按钮,打印出我对它们所赋予的价值。 在我看来,所有按钮都应该在文本值上打印相同的值。相反,他们都打印“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()

Tags: 方法textfrom文本importfortkinterdef
2条回答

这是初学者经常遇到的问题,因为您不了解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()放在新行上,这样你就避免了另一个非常常见的初学者问题。你知道吗

解决方案是在构造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()

相关问题 更多 >