【问题标题】:Is there a possibility to "revive" buttons after .destroy()?.destroy() 之后是否有可能“恢复”按钮?
【发布时间】:2026-01-16 17:45:01
【问题描述】:

我正在用 Python 编写一个游戏,为此我想在 tkinter 中有一些按钮,我可以通过另一个按钮单击来销毁和“恢复”这些按钮。是否有可能“复活”被破坏的按钮?

我尝试再次对按钮进行网格化,但没有成功。

def btnclick(event):
    b1.destroy()
def revive(event):
    b1.grid(row=0, column=4)
b1 = Button(root)
b2 = Button(root)
b1.bind("<Button-1>", btnclick)
b2.bind("<Button-1>", revive)
b1.grid(row=0, column=4)
b2.grid(row=1, column=4)

我认为这会将按钮放回屏幕上,但我只收到此错误:_tkinter.TclError: bad window path name ".47822896"

【问题讨论】:

    标签: python-3.x button tkinter


    【解决方案1】:

    你不能“复活”一个被摧毁的物体;您可以重新创建它,或者更好的是,您可以使用 grid_forget 将其从 GUI 布局中删除,然后使用几何管理器 grid 重新插入。

    这是一个简短的例子:

    import tkinter as tk
    
    def hide_b1():
        b1.grid_forget()
    
    def show_b1():
        b1.grid(row=0, column=4)
    
    root = tk.Tk()
    b1 = tk.Button(root, text='b1', command=hide_b1)
    b2 = tk.Button(root, text='b2', command=show_b1)
    show_b1()
    b2.grid(row=1, column=4)
    
    root.mainloop()
    

    请注意tk.Buttons 有一个属性command,您应该利用和使用它,而不是自定义事件绑定。

    【讨论】:

      最近更新 更多