469,352 Members | 1,754 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,352 developers. It's quick & easy.

Clearing the Tkinter Window

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.

Dec 15 '05 #1
4 37122
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
Dec 15 '05 #2
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

Dec 16 '05 #3
I don't want to destroy the root, I just want to remove the widgets
(the exact opposite of what Martin was saying). I started working on
James' idea, but it'll be a while before I have it fully implemented to
test.

Dec 16 '05 #4
"Dustan" <Du**********@gmail.com> wrote:
I don't want to destroy the root, I just want to remove the widgets
(the exact opposite of what Martin was saying). I started working on
James' idea, but it'll be a while before I have it fully implemented to
test.


each widget has a "children" attribute, which contains a dictionary with Tk widget
names as keys, and Python widget objects as values. to destroy all child widgets,
you can simply do:

for w in widget.children.values():
w.destroy()

where "widget" is the widget you want to reset.

</F>

Dec 16 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Egor Bolonev | last post: by
reply views Thread by black | last post: by
2 posts views Thread by black | last post: by
1 post views Thread by Vicente Palazón González | last post: by
5 posts views Thread by phickman | last post: by
1 post views Thread by James | last post: by
3 posts views Thread by Glen | last post: by
reply views Thread by Bob Greschke | last post: by
1 post views Thread by d4v.jung | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.