Seite 1 von 1

Labels in for-loop definieren

Verfasst: Dienstag 1. September 2020, 15:01
von Ede1994
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?

Re: Labels in for-loop definieren

Verfasst: Dienstag 1. September 2020, 15:19
von pillmuncher
Gar nicht. Dafür hat der Liebe Gott Listen erfunden.

Re: Labels in for-loop definieren

Verfasst: Dienstag 1. September 2020, 15:21
von Sirius3
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.

Re: Labels in for-loop definieren

Verfasst: Mittwoch 2. September 2020, 07:25
von Ede1994
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.