Seite 1 von 1

Label.destroy()

Verfasst: Samstag 28. Januar 2023, 11:54
von yildirim2665
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()

Re: Label.destroy()

Verfasst: Samstag 28. Januar 2023, 12:10
von __deets__
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.

Re: Label.destroy()

Verfasst: Samstag 28. Januar 2023, 12:13
von sparrow
@yildirim2665: Und die Anmerkugnen von __blackjack__ aus dem anderen Thread gelten natürlich auch hier. Da solltest du noch einmal nachlesen und nacharbeiten.

Re: Label.destroy()

Verfasst: Samstag 28. Januar 2023, 12:29
von yildirim2665
@__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??

Re: Label.destroy()

Verfasst: Samstag 28. Januar 2023, 12:43
von sparrow
@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.

Re: Label.destroy()

Verfasst: Montag 30. Januar 2023, 10:53
von yildirim2665
@ sparrov: :) danke für die Info, Länge der HumList (HumanList)* ist natürlich angebrachter.

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