Python:删除TKinter框架

时间:2010-10-18 18:38:12

标签: python tkinter

我想在点击特定按钮时从界面中删除一个框架。

这是调用的回调函数

def removeMyself(self):
    del self

然而,它并没有自行消除。我可能只是在没有更新界面的情况下删除python中的对象?

感谢

更新

self.itemFrame = tk.Frame(parent)
self.itemFrame.pack(expand=False, side=tk.TOP)

removeB = tk.Button(self.itemFrame, text="Remove", width=10, command=self.removeIsosurface)

def removeIsosurface(self):
    self.itemFrame.Destroy()

错误讯息:

AttributeError: Frame instance has no attribute 'Destroy'

4 个答案:

答案 0 :(得分:14)

要删除,请根据框架是打包还是打磨来调用frm.pack_forget()frm.grid_forget()

如果您不打算再次使用它,请调用frm.destroy(),或者当您想再次显示它时保持参考并重新包装或重新编辑。

答案 1 :(得分:2)

del不会删除任何内容。 del something只会从本地范围中删除something。虽然如果something是对象的唯一引用,它可能允许将来对其进行垃圾回收,甚至不要考虑使用del来删除对象!!!由于self只是一个普通变量,del self什么也不做,除了当然停止方法的其余部分访问实例(所以在方法的最后,它实际上就像{{1} })。

从GUI中删除小部件的确切方法取决于您使用的几何管理器。如果您使用pass,则可以使用.grid()。请注意,这仍然不会破坏小部件 - 恰恰相反,您可以再次继续.grid_forget()它! - 但这没有任何区别。

答案 2 :(得分:0)

不会有这个帮助:self.destroy()

chk this:PY cookbook最后一段

答案 3 :(得分:0)

假设你正在上课。你必须在这里做一些特别的事情:

  • 您要销毁的帧必须是实例变量
  • 你必须写一个回调(你做过)

所以,这是基本原型的样子。

from Tkinter import Tk, Frame, Button, Label

class GUI:

    def __init__(self, root):
        self.root = root # root is a passed Tk object
        self.button = Button(self.root, text="Push me", command=self.removethis)
        self.button.pack()
        self.frame = Frame(self.root)
        self.frame.pack()
        self.label = Label(self.frame, text="I'll be destroyed soon!")
        self.label.pack()

    def removethis(self):
        self.frame.destroy()

root = Tk()
window = GUI(root)
root.mainloop()

快乐狩猎!