动态创建 tkinter 元素时出现问题



我真的不明白这一点。 y 的文本很好,但是当它被传递到 lambda 函数中以打印 y 时,它只打印 2。

这看起来很简单,但我不明白。

有人可以解释或告诉我如何解决这个问题吗?

谢谢

from tkinter import *
window = Tk()
buttonHeight = 10
buttonWidth = 25
gridItemsList = [['-', '-', '-'], ['-', '-', '-'],['-', '-', '-']]
for y in range (0, 3):
for x in range(0, 3):           
gridItemsList[2-y][x] = ([Button(window, height=buttonHeight, width=buttonWidth, background="white", text=y, command=lambda:print(y)), [] ])
gridItemsList[2-y][x][0].grid(column = y, row=x, padx=20, pady=20)
mainloop()
y in range(0,3) 

y=0, y=1, y=2

因此,当您创建小部件时,y 的值通过循环 (0,1,2( 发生变化,因此按钮文本是正常的。 但在循环结束时,y 的值为y=2

因此,您将始终获得 2 作为打印函数的输出,因为这些按钮仅在循环完成后可用,并且循环后2y的最后一个值和当前值。

最新更新