我真的不明白。 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()
答案 0 :(得分:1)
y in range(0,3)
给予
y=0, y=1, y=2
因此,在创建窗口小部件时,y的值会通过循环(0,1,2)进行更改,因此按钮文本可以。但在循环结束时,y的值为y=2
。
因此,您将始终获得2作为打印功能的输出,因为仅在完成循环后才可以使用按钮,并且y
的最后一个值和当前值是2
之后的值循环。