Liste

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,

Code: Alles auswählen

  
  	class View(ttk.Frame):
			
			  	
  
  		def shHumList(self,humList):
            
            
            		for i, hum in enumerate(humList):
             		print(f'{i+1} {hum}') # diese Ausgabe soll im Frame erscheinen, anstatt print  
Wie kann ich die Elemente in der Frame anzeigen?? danke.
P.S.: benutze Tkinter.
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

habe folgendes gemacht:

Code: Alles auswählen

 for i, hum in enumerate(humList):
             self.lab=ttk.Label(self,text=(f'{i+1} {hum}'))
             self.lab.grid(row=i+10,column=1) 
klappt. danke
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das label an self zu binden ist in diesem Fall unnötig. Du erzählst so eh nur Zugriff auf das letzte Label. Alle anderen sind ‚verloren‘. Kann man sich also auch sparen.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@yildirim2665: Anmerkung zum Quelltext: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Namen sollten keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen. Wenn in `hum_list` also nicht Objekte enthalten sind, die in irgendeiner Form ”summen” im Sinne von Tönen enthalten, dann ist `hum` eher unzureichend. Und `lab` ist eine übliche Abkürzung für „Labor“/„laboratory“. Wenn man `label` meint, sollte man auch `label` schreiben.

Funktionen und Methoden werden üblicherweise nach der Tätigkeit benannt die sie durchführen. Das weiss der Leser was die machen und sie sind auch leichter von eher passiven Werten unterscheidbar.

Grunddatentypen haben in Namen nichts verloren. Das ändert man im Laufe der Programmentwicklung gerne mal zugunsten eines spezialisierten Typs und dann muss man das ganze Programm durchgehen und die betroffenen Namen anpassen, oder hat falsche, irreführende Namen im Programm.

Das `self` ist an der Stelle nicht nur überflüssig, man sollte auch ausserhalb der `__init__()` keine neuen Attribute einführen. Nach Ablauf der `__init__()` sollte ein Objekt komplett initialisiert und benutzbar sein. Wenn das nicht der Fall ist, und andere Methoden neue Attribute einführen, wird es unübersichtlich und fehleranfällig.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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 ausführen??
z.B: wenn ich eine neue Person hinzufüge

Code: Alles auswählen


self.button_new_hum = ttk.Button(self,text='NewHum',command=self.insert_hum) # in der __init__

def insert_hum(self):
        self.root2 = Toplevel()

        namLab = ttk.Label(self.root2,text='Name')
        entNam = ttk.Entry(self.root2,textvariable=self.name_var)
        namLab.grid(row=1,column=1)
        entNam.grid(row=1,column=2)

        altLab = ttk.Label(self.root2,text='Alter')
        entNam = ttk.Entry(self.root2,textvariable=self.alt_var)
        altLab.grid(row=2,column=1)
        entNam.grid(row=2,column=2)

        okBut = ttk.Button(self.root2,text='Einfügen',command=self.add_hum)
        okBut.grid(row=3,column=1)

        abbBut = ttk.Button(self.root2,text='Abbruch',command=self.close_root2)
        abbBut.grid(row=3,column=2)
        
def add_hum(self):
        
        
        if self.controller:
            self.controller.new_hum(self.name_var.get(),int(self.alt_var.get())) # Modelaktualisierun über einen Controller
          
 def close_root2(self):
        self.name_var.set('')
        self.alt_var.set('')
        self.root2.destroy()
        self.root2.quit()


yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

@__blackjack__: nochmals der obige code, so wie du ihn haben wolltest!!!

Code: Alles auswählen

self.button_new_hum = ttk.Button(self,text='NewHum',command=self.insert_hum) # in der __init__

def insert_hum(self):
        self.root2 = Toplevel()

        name_label = ttk.Label(self.root2,text='Name')
        entry_name = ttk.Entry(self.root2,textvariable=self.name_var)

        name_label.grid(row=1,column=1)
        entry_name.grid(row=1,column=2)

        alter_label = ttk.Label(self.root2,text='Alter')
        entry_alter = ttk.Entry(self.root2,textvariable=self.alt_var)
        alter_label.grid(row=2,column=1)
        entry_name.grid(row=2,column=2)

        ok_button = ttk.Button(self.root2,text='Einfügen',command=self.add_hum)
        ok_button.grid(row=3,column=1)

        abbruch_button = ttk.Button(self.root2,text='Abbruch',command=self.close_root2)
        abbruch_button.grid(row=3,column=2)
        
def add_hum(self):
        
        
        if self.controller:
            self.controller.new_hum(self.name_var.get(),int(self.alt_var.get())) # Modelaktualisierun über einen Controller
          
 def close_root2(self):
        self.name_var.set('')
        self.alt_var.set('')
        self.root2.destroy()
        self.root2.quit()
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ah, hum soll human heißen. Die zwei eingesparten Buchstaben waren es wirklich wert.
Antworten