gpt4 book ai didi

python - 如何使用 Tkinter 正确构造按钮回调?

转载 作者:行者123 更新时间:2023-11-28 16:35:09 26 4
gpt4 key购买 nike

这里我有一个使用 Tkinter 的简单 python 应用程序

from Tkinter import *
def draw(i,j):
button[(i,j)]['text'] = 'X'

if __name__ == '__main__':
root = Tk()
root.title('Number Recognation')

button = {}



for i in range(2):
for j in range(2):
button[(i,j)] = Button(width = 3,command = lambda: draw(i,j))
button[(i,j)].grid(row = i,column = j)




root.mainloop()

我想制作一个小程序,其中有四个空白按钮,您按下其中一个按钮,它会将文本更改为“X”。因此,当我使用 for 循环编写此程序时,它无法正常工作,单击它会更改位于第二行和第二列的按钮。如果我写的时候没有for 循环

    button[(0,0)] = Button(width = 3,command = lambda: draw(0,0))
button[(0,0)].grid(row = 0,column = 0)

button[(0,1)] = Button(width = 3,command = lambda: draw(0,1))
button[(0,1)].grid(row = 0,column = 1)

button[(1,0)] = Button(width = 3,command = lambda: draw(1,0))
button[(1,0)].grid(row = 1,column = 0)

button[(1,1)] = Button(width = 3,command = lambda: draw(1,1))
button[(1,1)].grid(row = 1,column = 1)

这里没有问题。

我真的很想使用 for 循环,因为我要在这里设置很多按钮。

最佳答案

i, j 在调用回调时绑定(bind),而不是在创建回调时绑定(bind)。您可以使用默认参数来避免延迟绑定(bind)问题。

for i in range(2):
for j in range(2):
button[(i,j)] = Button(width = 3,command = lambda i=i, j=j: draw(i,j)) # <---
button[(i,j)].grid(row = i,column = j)

关于python - 如何使用 Tkinter 正确构造按钮回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27332437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com