Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态创建tkinter元素时出现问题_Python_Tkinter - Fatal编程技术网

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

Python 动态创建tkinter元素时出现问题,python,tkinter,Python,Tkinter,我真的不明白。。 y的文本很好,但当它被传递到lambda函数以打印y时,它只打印2 这似乎很简单,但我不明白 有人能解释一下或告诉我如何解决这个问题吗 谢谢 from tkinter import * window = Tk() buttonHeight = 10 buttonWidth = 25 gridItemsList = [['-', '-', '-'], ['-', '-', '-'],['-', '-', '-']] for y in range (0, 3): fo

我真的不明白。。 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=0, y=1, y=2
因此,当创建小部件时,y的值通过循环0,1,2发生变化,因此按钮文本是OK的。但在循环结束时,y的值是y=2

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

创建按钮时,它的可能副本不会从y复制值。所有的按钮都只引用变量y,当你们按下按钮时,从y中获取值——当你们按下按钮时,y是for循环的最后一个值。使用command=lambda a=y:printa创建按钮时,它会从y复制值,以便每个按钮都有不同的值。
 y=0, y=1, y=2