Clearing the Tkinter Window

Martin Franklin mfranklin1 at gatwick.westerngeco.slb.com
Fri Dec 16 06:10:09 EST 2005


James Stroud wrote:
> Dustan wrote:
> 
>>I'm a newbie here, especially with Tkinter.  I'm writing a program that
>>has 3 phases, if you will, in which I would have to clear the window
>>and insert new widgets. Is this possible, and if so, how?  I'm writing
>>my application class based on Frame, if that helps at all.
>>
> 
> 
> Its not obvious what you are asking.
> 
> But, if you populate a Frame with widgets, then you can destroy those 
> widgets if you destroy the Frame:
> 
> tk = Tk()
> f = Frame(tk)
> 
> # fill frame with 10 buttons
> for i in xrange(10):
>    Button(f, text=str(i)).pack()
> 
> # kill the frame and buttons
> f.destroy()   # references to buttons gone too, so they are GC'd
> 
> # make a new frame and put it in tk
> f = Frame(tk)
> 
> # etc.
> 
> You will want to make sure any name assignments are re-assigned, del'd, 
> or go out of scope after you destroy frame, or the button objects won't 
> be garbage collected, even though they are destroyed when the frame is 
> destroyed.
> 
> James


destroy is one way to do it... but if you need to access the destroyed
widgets information after they have gone it may cause problems.. another
method to look at is (are) the *_forget methods (pack_forget /
grid_forget) these do not destroy the widgets but rather remove them
from view.  If for example you are writing a 'wizard' type GUI and want
to show the user the 'Next' page simply forget the current page and pack
the next one in it's place.

Another way is to grid each 'page' over the top of each other and simply
change the 'raise' order (with tkraise method) not 100% sure if this
works though, i've not used it directly myself...


Cheers
Martin




More information about the Python-list mailing list