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

时间:2019-09-29 19:53:08

标签: python 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()

1 个答案:

答案 0 :(得分:1)

 y in range(0,3) 

给予

 y=0, y=1, y=2

因此,在创建窗口小部件时,y的值会通过循环(0,1,2)进行更改,因此按钮文本可以。但在循环结束时,y的值为y=2

因此,您将始终获得2作为打印功能的输出,因为仅在完成循环后才可以使用按钮,并且y的最后一个值和当前值是2之后的值循环。