I want to remove a frame from my interface when a specific button is clicked.
This is the invoked callback function
def removeMyself(self):
del self
del
does not delete anything. del something
just removes something
from the local scope. And although if something
was the only reference to an object, it may allow the object it to be garbage collected in the future, don't even think of using del
to delete objects!!! And since self
is just a normal variables, del self
does nothing, except of course stopping the rest of the method from accessing the instance (so at the end of the method, it's actually like pass
).
The exact way to remove a widget from the GUI depends on what geometry manager you use. If you used .grid()
, you can use .grid_forget()
. Note that this still doesn't destroy the widget - quite the contrary, you can go on and .grid()
it again! - but that doesn't make any difference.
wont this help : self.destroy()
chk this out : PY cookbook the last para
To remove, call either frm.pack_forget()
or frm.grid_forget()
depending on whether the frame was packed or grided.
Then call frm.destroy()
if you aren't going to use it again, or hold onto the reference and repack or regrid when you want to show it again.
Let's say you're making a class. You have to do a couple of things special here:
So, here's how a basic prototype would look.
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()
Happy hunting!