是否可以在 .destroy() 之后"revive"按钮?



我正在用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"

您无法"恢复"被破坏的对象;您可以重新创建它,或者更好的是,您可以使用 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,您应该利用和使用,而不是事件的自定义绑定。

相关内容

最新更新