【问题标题】:Is there a possibility to "revive" buttons after .destroy()?.destroy() 之后是否有可能“恢复”按钮?
【发布时间】:2019-06-15 10:54:24
【问题描述】:

我正在用 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,您应该利用和使用它,而不是自定义事件绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多