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

2024-10-01 15:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的不明白。。 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()

Tags: lambda函数infrom文本importfortkinter
1条回答
网友
1楼 · 发布于 2024-10-01 15:47:54
 y in range(0,3) 

给予

 y=0, y=1, y=2

因此,在创建小部件时,y的值通过循环(0,1,2)发生变化,因此按钮文本是确定的。但是在循环的末尾,y的值是y=2

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

相关问题 更多 >

    热门问题