from tkinter import *
F=Tk()
i=1
while i<10:
newButton = Button(F,text="Show Number",command=lambda:showNumber(i))
newButton.pack(side=TOP)
i+=1
def showNumber(nb):
print(nb)
F.mainloop()
所有按钮都返回 10。为什么?
我想要按钮1返回1,按钮2返回2...
非常感谢你对我的帮助
你的匿名lambda
函数可以被认为是闭包(正如 @abernert 指出的,它们不是actuallyPython 中的闭包) - 它们“关闭”变量i
,以便以后参考。但是,他们不会在定义时查找值,而是查找打电话时,这是一段时间after整个while
循环结束(此时,i
等于 10)。
要解决此问题,您需要重新绑定值i
供 lambda 使用的其他东西。您可以通过多种方式做到这一点 - 其中之一是:
...
i = 1
while i < 10:
# Give a parameter to the lambda, defaulting to i (function default
# arguments are bound at time of declaration)
newButton = Button(F, text="Show Number",
command=lambda num=i: showNumber(num))
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)