Seite 1 von 1

Buttons in liste

Verfasst: Montag 27. Januar 2020, 20:58
von Hirschii
Hey Leute,
Ich bin ziemlicher Anfänger und wollte "Tic Tac Toe" Programmieren aber mit einem noch nicht festgelegtem Feld.
Man kann also eine zahl am Anfang eintragen die Dan die Größe des Feldes Bestimmt. Die Verschieden Buttens Füge ich automatisch in eine liste Hinzu. Das Problem ist aber das ich dann nicht weiß , wenn ein Button angeklickt wird, welcher dieser ist.
Hier nochmal der Code:

def FelderErzeuge(x):
global Felder, Feld, i
print("X ist", x)
for d in range(x * x):
print(d)
Feld.append(Button(screen, text=" ",font='Times 20 bold', bg='gray', fg='black', height=4, width=8, command=lambda: btnClick(Feld[d]), command=pin()))
print("FeldErzeugen")
for x in range(num):
for y in range(num):
Feld.grid(row=x, column=y)
print("I ist ", i)
if i <= len(Feld):
i += 1

X ist die Größe die man selber dann festlegen kann.
btnClickt wird vorher Definiert und soll den text an der mitgegeben stelle ändern.
da die Variable aber gespeichert wird und nicht nur der derzeitige wert der Variable d, wird immer das Letzte Feld angesprochen.

würde mich echt freuen wenn einer lust und zeit hat mir zu helfen,
LG Hirschii

Re: Buttons in liste

Verfasst: Montag 27. Januar 2020, 21:47
von __deets__
Bitte Code in Code Tags setzten. Dazu im vollständigen Editor den </> Knopf drücken nach markieren des Quelltextes.

Re: Buttons in liste

Verfasst: Montag 27. Januar 2020, 22:01
von Sirius3
Vergiss gleich wieder dass es `global` gibt. Das schafft nur Probleme und löst keine. Für GUI-Programme braucht man zwangsläufig Klassendefinitionen.
`x` ist ein sehr schlechter Name für die Größe des Feldes, vor allem, wenn `x` später für etwas anderes recycled wird.
Warum hast Du eigentlich eine for-Schleife zum Erzeugen und eine weitere für `grid`?
Du mußt in Dein lambda einfach die Koordinaten packen und statt lambda functools.partial benutzen.