Labels in for-loop definieren

Fragen zu Tkinter.
Antworten
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hallo :D
Ich möchte in einem for-loop verschiedene labels anhand eines dictionary definieren. Also ausgeschrieben würde das so aussehen (Auszug und vereinfacht):

Code: Alles auswählen

patdata={... } #dictionary

root = tk.Tk()

label0 = tk.Label(root, text="A").grid(row=0, column=0)
label1 = tk.Label(root, text="B").grid(row=1, column=0)
label2 = tk.Label(root, text="C").grid(row=2, column=0)
label3 = tk.Label(root, text="D").grid(row=3, column=0)

root.mainloop()
Jetzt habe ich folgendes gemacht, um den Schreibaufwand und den Code zu reduzieren:

Code: Alles auswählen

i = 0
for key in patdata:
    label = tk.Label(root, text=key).grid(row=i, column=0)
    i += 1
Das klappt auch alles. Aber jetzt habe ich ja nicht die Bezeichnung 'label0' usw. Wie bekomme ich diese 'Definition' der labels hin?
Benutzeravatar
pillmuncher
User
Beiträge: 1531
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Gar nicht. Dafür hat der Liebe Gott Listen erfunden.
In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Deine Variablen label0, ... sind unsinnig, weil sie alle den Wert None enthalten.
Davon abgesehen, statt hier Namen mit Nummern zu vergeben, solltest Du sie in einer Liste sammeln:

Code: Alles auswählen

label = []
for row_index, key in enumerate(patdata):
    label = tk.Label(root, text=key)
    label.grid(row=row_index, column=0)
    labels.append(label)
Auf Label muß man aber später selten wieder zugreifen, brauchst Du die überhaupt.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Sirius3 hat geschrieben: Dienstag 1. September 2020, 15:21 Deine Variablen label0, ... sind unsinnig, weil sie alle den Wert None enthalten.
Davon abgesehen, statt hier Namen mit Nummern zu vergeben, solltest Du sie in einer Liste sammeln:

Code: Alles auswählen

label = []
for row_index, key in enumerate(patdata):
    label = tk.Label(root, text=key)
    label.grid(row=row_index, column=0)
    labels.append(label)
Auf Label muß man aber später selten wieder zugreifen, brauchst Du die überhaupt.
Ob ich das brauche weiß ich noch nicht, es war eher eine Verständnisfrage!

Danke für die Hilfe.
Antworten