Variable mit der man sich auf Knöpfe beziehen kann

Fragen zu Tkinter.
Antworten
Connor
User
Beiträge: 1
Registriert: Sonntag 23. Februar 2020, 16:09

Guten Tag,
ich möchte Tic Tac Toe programmieren, allerdings nicht mit neun Funktionen für neun Knöpfe, sondern mit einer Funktion für alle.

Code: Alles auswählen

from tkinter import *


class TicTacToe:

    def __init__(self, master):
        frame = Frame(master)
        frame.grid()

        self.knopf1 = Button(master, width=7, height=3, command=lambda: self.Kreuz(1))
        self.knopf1.grid(column=1, row=1, padx=3, pady=3)

        self.knopf2 = Button(master, width=7, height=3, command=lambda: self.Kreuz(2))
        self.knopf2.grid(column=2, row=1, padx=3, pady=3)

    def Kreuz(self,c):
        self.(Hier möchte ich den Knopf haben der diese Methode rief).config(text='X')



root = Tk()
root.title("TicTacToe")


Test = TicTacToe(root)


root.resizable(width=False, height=False)
root.mainloop()



Test = TicTacToe(root)


root.resizable(width=False, height=False)
root.mainloop()
Jetzt stellt sich für mich die Frage, wie ich die Methode erkennen lasse, welcher Knopf diese aufgerufen hat.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt dafuer verschiedene Moeglichkeiten, aber die einfachste fuer deinen Fall ist statt den schon jetzt schlecht benannten "self.knopfNUMMER" es gleich richtig zu machen, und eine Liste von Knoepfen zu haben. Und damit ist der Zugriff dann per Index auf diese Liste moeglich.

Code: Alles auswählen

     ...
     self._knoepfe = []
     self._knoepfe.append(Button(master, width=7, height=3, command=lambda: self.Kreuz(0))) # ACHTUNG: 0-basiert

    ...
    print(self._knoepfe[c])
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt des *-Import `import tkinter as tk` und alle Namen per tk.xy ansprechen. Alles ab `root =` gehört in eine Funktion, Skizze man üblicherweise `main` nennt. Die 9 Knöpfe willst Du am besten mit einer Schleife erzeugen.
Antworten