gpt4 book ai didi

python - 在 Tkinter 中删除自己的按钮

转载 作者:行者123 更新时间:2023-12-04 02:22:24 24 4
gpt4 key购买 nike

如果有人问过这个问题,我很抱歉,但我没能找到。我也刚刚开始学习编程,因此非常感谢您的反馈。 :)

我的最终目标是创建一个 8 乘“x”的按钮网格,这些按钮在按下时会改变自己的颜色。我想用它来制作一个网格,我可以将其上传到我制作的 POV 玩具中。此代码创建一列 8 个按钮,每个按钮都有一个回调,将其自身作为参数传递。回调函数的想法可以对按钮做一些事情,比如改变它的颜色,或者删除它。

import Tkinter    
def unpack(i):
buttons[i].pack_forget()
print i

top = Tkinter.Tk() buttons = [] for i in range(0, 8):
buttons.append(Tkinter.Button(top, text='Hello', command=lambda: unpack(i)))

for button in buttons:
button.pack()

top.mainloop()

当我执行此操作时,我得到一个包含 8 个按钮列的窗口,当我单击其中一个按钮时,一个按钮被删除。当我点击第二个时,什么也没有发生。在我的命令提示符下,无论我按哪个按钮,我都会打印出数字 7。我怀疑问题出在创建按钮的 for 循环中,但我不知道如何解决它。

谢谢!

最佳答案

将按钮对象而不是索引传递给回调函数,因为索引在列表中的项目删除后发生变化。

import Tkinter    

top = Tkinter.Tk()
for i in range(0, 8):
btn = Tkinter.Button(top, text='Hello')
btn['command'] = lambda b=btn: b.pack_forget()
btn.pack()

top.mainloop()

注意:为了防止后期绑定(bind)问题,我在上面的代码中使用了默认参数。

关于python - 在 Tkinter 中删除自己的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119015/

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