首先,对这个标题感到抱歉,我找不到更好的标题。
以下代码是我的 Python 程序中遇到的问题的最小化版本(顺便说一句,我是新手)。
def onClick(i):
print "This is Button: " + str(i)
return
def start():
b = [0 for x in range(5)]
win = Tkinter.Tk()
for i in range(5):
b[i] = Tkinter.Button(win,height=10,width=100,command=lambda : onClick(i))
b[i].pack()
return
它能做什么:
无论我点击哪个按钮,它都会显示“这是按钮:4”。
我想要的是:
第一个按钮应该显示“这是按钮:0”等等。
这是 Python 想要的行为吗?如果答案是肯定的,为什么会这样呢?我该如何修复它?
另一方面,这工作得很好:
def start():
x = [0 for x in range(5)]
for i in range(5):
x[i] = lambda:onClick(i)
x[i]()
return
使用默认参数以避免后期绑定问题(否则i
在调用 lambda 函数时绑定,而不是在创建时绑定):
def start():
buttons = []
win = Tkinter.Tk()
for i in range(5):
b = Tkinter.Button(win, height=10, width=100, command=lambda i=i: onClick(i))
b.pack()
buttons.append(b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)