Seite 1 von 1

Frame alle "Kinder" löschen

Verfasst: Mittwoch 14. Januar 2015, 14:24
von HardwareManager
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

Re: Frame alle "Kinder" löschen

Verfasst: Mittwoch 14. Januar 2015, 14:29
von EyDu
Was genau möchtest du denn machen? Alle Widgets löschen ist normalerweise kein schöner Ansatz, da gibt es bessere Lösungen.

Re: Frame alle "Kinder" löschen

Verfasst: Mittwoch 14. Januar 2015, 15:49
von BlackJack
Zum Beispiel den Frame löschen, oder noch besser gar nichts löschen sondern austauschen.

Re: Frame alle "Kinder" löschen

Verfasst: Mittwoch 14. Januar 2015, 16:04
von bfm
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

Re: Frame alle "Kinder" löschen

Verfasst: Mittwoch 14. Januar 2015, 20:35
von wuf
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: