Label.destroy()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

hi,

habe mehrere Label erzeugt, versuche diese, nach dem Einsehen, mit einem Button zu löschen, jedoch wird nur das letzte Label gelöscht, bitte um Hilfe:

Code: Alles auswählen

def shHumList(self,humList):
            self.i = int()
            self.la = ttk.Label(self,text='HumList')
            self.la.grid(row=2,column=2)
            
            for i, hums in enumerate(humList):
                 self.lab=ttk.Label(self,text=(f'{hums}'))
                 self.lab.grid(row=i+3,column=2)
                 self.i = i

            self.okBut =ttk.Button(self,text='OK',command=self.closeHumList)
            self.okBut.grid(row=self.i+4,column=2)
             

def closeHumList(self):
        self.la.destroy()
        
        for i in range(0,self.i+1):    
            self.lab.destroy()
            
            
        self.okBut.destroy()
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Habe ich dir doch schon gesagt. Es bringt nichts, ein Label an self zu binden, weil das nur das letzte ‚aufhebt‘. Wenn du alle Labels erhalten willst, musst du sie in einer Liste speichern.
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

@yildirim2665: Und die Anmerkugnen von __blackjack__ aus dem anderen Thread gelten natürlich auch hier. Da solltest du noch einmal nachlesen und nacharbeiten.
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

@__blackjack___: danke für die Infos. in 'hum_list' sind dict's enthalten... human_list=[{'name': name, 'alter':....},{'name':....}]

bin der totale Anfänger in Python, es stellt sich für mich nun die Frage...: 'Wenn ich ein Toplevel() im __init__ erstelle wird es direkt angezeigt, wie kann ich es später hinzufügen??
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

@yildirim2665: Zu der fürchterlich schlenten Namensgebung hat __blackjack__ ja schon etwas in dem anderen Thread geschrieben.
Das hier

Code: Alles auswählen

self.i = int()
ist unnötig. Man initialisiert keine Variablen auf Vorrat. Zumindest glaube ich, dass du das hier tun wolltest. Und dort, wo man 0 braucht, schreibt man auch 0 und nicht int().
Dann verstehe ich nicht, warum du die Variable in der for-Schleife hoch zählst. Denn verwenst du in der Schleife sowohl i als auch self.i was jetzt nicht wirklich zum Verständnis beiträgt.
Und nach der Schleife verwendest du self.i nur, um 4 zu addieren und als Parameter zu übergeben. Da du aber self.i nur dazu verwendest, um den Wert in der Schleife hoch zu zählen, kannst du den Wert auch einfach aus der Anzahl der Elemente in humList (Humus Liste) ermitteln.
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

@ sparrov: :) danke für die Info, Länge der HumList (HumanList)* ist natürlich angebrachter.

*humList=[hum1,hum2,...] und hum = {'name':'hum,'alter':...}
Antworten