【发布时间】:2020-01-19 16:23:07
【问题描述】:
我正在练习 tkinter,但遇到了一个问题。
我需要在for循环中创建几个按钮,并根据循环的迭代给它一个命令。
但无论我按什么按钮,输出始终是“d”。 这是一个简化版:
from tkinter import *
root = Tk()
def write(n):
print(n)
indexes = ['a','b','c','d']
for i in range(len(indexes)):
button = Button(root, text=indexes[i], command=lambda:write(indexes[i]))
button.grid(row=0, column=i)
root.mainloop()
有人知道该怎么做吗?谢谢
【问题讨论】:
-
难道不是因为命令
lambda:write(indexes[i])仅在按下按钮时才被评估,因此它执行lambda:write('d')因为3是i的最后一个值导致它返回@ 987654326@. -
有道理,我试着编辑一下
-
command=lambda i=i:write(indexes[i]).