2013-04-03 5 views
19

Ich versuche, einen Rahmen im Tkinter zu löschen, so dass der neue Inhalt geschrieben werden kann (Informationen aktualisieren), aber ich konnte es nicht schaffen. Ich kenne diesePython Tkinter einen Rahmen löschen

frame.destroy() 
frame.pack_forget() 
frame.grid_forget() 

aber frame.destroy() wird den Rahmen vollständig entfernen. Und die beiden anderen könnte auch geben mir nicht das Ergebnis i want.What ich brauche, ist nur zu aufzuräumen alle Elemente in dem Rahmen, sondern der Rahmen selbst wird bleiben. Gibt es das überhaupt, um es zu tun?

+2

Je nach Aufgabe können Sie einen Rahmen im Rahmen erstellen und zerstören – User

Antwort

15

pack_forget und grid_forget nur entfernen Widgets aus Sicht, es sie nicht zerstört. Wenn Sie die Widgets nicht erneut verwenden möchten, ist Ihre einzige echte Wahl, sie mit der destroy Methode zu zerstören.

Dafür hast du zwei Möglichkeiten: zerstöre jeden einzelnen oder zerstöre den Rahmen, wodurch alle seine Kinder zerstört werden. Letzteres ist in der Regel am einfachsten und effektivsten.

Da Sie angeben, dass Sie den Container-Frame nicht löschen möchten, erstellen Sie einen sekundären Frame. Haben Sie diesen sekundären Rahmen den Container für alle Widgets, die Sie löschen möchten, und dann fügen Sie diesen einen Rahmen in den übergeordneten nicht zerstören möchten. Dann ist es nur eine Frage der Zerstörung dieses einen Rahmens und alle inneren Widgets werden mit ihm zerstört werden.

+0

Ich schaffte es, mein Problem zu lösen, indem Sie eine Funktion erstellen, die den Rahmen neu erstellen will ich jedes Mal aufräumen, wenn ich es aktualisieren möchte.Vielen Dank Für deine Hilfe Bryan, deine Antwort war informativ. –

+0

@Chris Aung: Würde es Ihnen etwas ausmachen, diese Funktion zu teilen? Ich suche genau das, weil mein eigenes aus irgendeinem Grund versagt. – Zelphir

+0

Hier kann man eine Methode finden, die funktioniert: http://stackoverflow.com/a/15995920/1829329 – Zelphir

25

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html

w.winfo_children()
Gibt eine Liste aller Kinder w, in ihrer Stapelreihenfolge vom niedrigsten (unten) bis zum höchsten (oben).

for widget in frame.winfo_children(): 
    widget.destroy() 

Werden alle das Widget in Ihrem Rahmen zerstören. Keine Notwendigkeit für einen zweiten Rahmen.