Frame alle "Kinder" löschen

Fragen zu Tkinter.
Antworten
HardwareManager
User
Beiträge: 59
Registriert: Freitag 31. Mai 2013, 21:18

Hallo,
kann man irgendwie alle Widgets in einem Frame löschen?
Ich habe schon ziemlich viel gegoogelt und bin auf ungefähr gar nichts gestoßen.
Kennt ihr eine Antwort?
Danke :K
ImmmerEineGuteIdee
|=|=|=|=|=|=|=|
HardwareManager
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Was genau möchtest du denn machen? Alle Widgets löschen ist normalerweise kein schöner Ansatz, da gibt es bessere Lösungen.
Das Leben ist wie ein Tennisball.
BlackJack

Zum Beispiel den Frame löschen, oder noch besser gar nichts löschen sondern austauschen.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

ich arbeite gerade ein Tutorial zum Grid Geometry Manager durch. Da gibt es die Methoden forget und remove. Bei forget wird das widget vom Bildschirm entfernt und alle eingestellten Optionen zum Widget gehen verloren. Bei remove verschwindet das Widget auch, aber die Optionen bleiben erhalten.

Bei anderen Managern wird es vielleicht die gleichen oder ähnliche Methoden geben.

mfg
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi bfm

So kannst du auch alle Widgets aus einem Frame entfernen:

Code: Alles auswählen

#!/usr/bin/env python
# coding: UTF-8

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

TEST_WIN_XPOS = 0
TEST_WIN_YPOS = 0

class Test(object):
    
    def __init__(self, title):
        self.win = tk.Tk()
        self.win.title(title)
        #self.win.geometry('+{0}+{1}'.format(TEST_WIN_XPOS, TEST_WIN_YPOS))
        self.win.geometry('300x300')
        self.win.protocol("WM_DELETE_WINDOW", self.close)
        
        self.main_frame = tk.Frame(self.win, bg='steelblue')
        self.main_frame.pack(fill='both', expand=True)
        
        widgets = [tk.Button(self.main_frame, text=nr, bd=0).pack(expand=True,
            pady=2) for nr in range(6)]
        
        button = tk.Button(self.win, text='Alle Widgets entfernen', bd=1,
            command=self.remove_widgets).pack()
    
    def remove_widgets(self):
        for widget in self.main_frame.winfo_children():
            widget.destroy()
                
    def run(self):
        self.win.mainloop()
    
    def close(self):
        print("Do something before shutdown")
        self.win.destroy()
            
Test("Remove Widgets").run()
Gruss wuf :wink:
Take it easy Mates!
Antworten