Button in forschleife mehrfach erzeugen
Verfasst: Mittwoch 30. Juni 2021, 14:08
Hallo zusammen,
ich bin grade dabei eine Lotterie in einer GUI abzubilden. Dafür habe ich zunächst für jede Zahl manuell einen Button erstellt:
button1 = tkinter.Button(Fenster, text="1", bd=20, command=lambda: [switch(button1, 1), zahl(1, button1), print(Spielerzahlen)])
Die Funktionen "switch" und "zahl" bedienen sich an Namen des jeweiligen Button, da dieser beim klicken zum einen verändert werden soll und zum anderen die Zahl den der jeweilige Button abbildet in eine Liste packen.
Diese umsetzung klappt generell nur finde ich das nicht sehr elegant gelöst, also habe ich versucht, es mit einer Forschleife zu lösen:
Buttonerzeugung(y,z):
for i in list(range(1,50)):
Button = tkinter.Button(text=i, bd=20, command=lambda: [switch(Button, i), zahl(i, Button), print(Spielerzahlen)])
Button.grid(row=y, column=z)
z = z+1
if z == 7:
y+=1
z = 0
Diese erstellt zwar alle Buttons, jedoch werden die Funktionen nicht richtig aufgerufen, wenn ich bspw. auf die 25 klicke, wird direkt ein kreuz auf die letzte Zahl "49" gesetzt.
Ich dachte zunächst das liegt daran, dass der Name ja immer gleich bleibt, man vielleicht i in die Deklarierung einbinden könnte, bspw.
Button = ...
so dass für jedem i in der Liste so ein Button erstellt wird, das habe ich aber von der syntax nicht hinbekommen. Ist es aus diesem Grund gar nicht möglich oder liege ich da auf dem Holzweg?
Vielen Dank und ich freue mich auf eure Antworten.
LG
Detek001
ich bin grade dabei eine Lotterie in einer GUI abzubilden. Dafür habe ich zunächst für jede Zahl manuell einen Button erstellt:
button1 = tkinter.Button(Fenster, text="1", bd=20, command=lambda: [switch(button1, 1), zahl(1, button1), print(Spielerzahlen)])
Die Funktionen "switch" und "zahl" bedienen sich an Namen des jeweiligen Button, da dieser beim klicken zum einen verändert werden soll und zum anderen die Zahl den der jeweilige Button abbildet in eine Liste packen.
Diese umsetzung klappt generell nur finde ich das nicht sehr elegant gelöst, also habe ich versucht, es mit einer Forschleife zu lösen:
Buttonerzeugung(y,z):
for i in list(range(1,50)):
Button = tkinter.Button(text=i, bd=20, command=lambda: [switch(Button, i), zahl(i, Button), print(Spielerzahlen)])
Button.grid(row=y, column=z)
z = z+1
if z == 7:
y+=1
z = 0
Diese erstellt zwar alle Buttons, jedoch werden die Funktionen nicht richtig aufgerufen, wenn ich bspw. auf die 25 klicke, wird direkt ein kreuz auf die letzte Zahl "49" gesetzt.
Ich dachte zunächst das liegt daran, dass der Name ja immer gleich bleibt, man vielleicht i in die Deklarierung einbinden könnte, bspw.
Button = ...
so dass für jedem i in der Liste so ein Button erstellt wird, das habe ich aber von der syntax nicht hinbekommen. Ist es aus diesem Grund gar nicht möglich oder liege ich da auf dem Holzweg?
Vielen Dank und ich freue mich auf eure Antworten.
LG
Detek001