tkinter python buttons angeklickt farbe verändern?
hey, habe jetzt mit 2 for schleifen 4x4 buttons generiert, jetzt weiß ich nicht, wie ich mit tkinter es so mache, dass die buttons durch ein klick die farbe ändern. Ausserdem soll auch noch in einer liste gespeichert werden welchen button ich angeklickt habe (1-1,1,2...,4-3,4-4). bin Anfänger, bitte helfen sitze da schon seit tagen dran irgendwas im Internet rauszusuchen.
1 Antwort
(...) dass die buttons durch ein klick die farbe ändern. (...)
Du musst einen Event Handler an das Klickevent von jedem Button hängen. Hier findest du zum einen mehr Informationen zu Events und zum anderen, wie dein Problem gelöst werden kann:
- https://www.python-course.eu/tkinter_events_binds.php
- https://stackoverflow.com/questions/5543815/how-to-change-button-color-with-tkinter
Ausserdem soll auch noch in einer liste gespeichert werden welchen button ich angeklickt habe (...)
In dem oberen Zuge kommst du auch an eine Referenz des Buttons. Das heißt, du kannst dir seinen Namen o.ä. von ihm speichern. Die Liste sollte in diesem Kontext global (also in dem Handler) verfügbar sein, sodass du einen Wert hinzufügen kannst.
Die bind-Methode kann 2 Argumente entgegennehmen: Event und Callback. Über letzteres kannst du nun Argumente mit in die Handler-Funktion tragen:
def callback(evt, a, b):
print (a + b)
widget.bind(yourButton, lambda evt, a=2, b=4: self.callback(evt, a, b));
Weiteres wird hier ausführlicher erklärt:
https://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks
den letzten teil verstehe ich nicht ganz bzw weiß ich nicht wie ich es jetzt realisieren soll. Angenommen ich will einfach verschiedene integer werte in die Funktion übergeben (habe jetzt mal aus dem link ein codestück kopiert)
widget.bind('<Button-1>', hello)
hier wird ja nach dem klicken die Funktion hello aufgerufen. muss ich jetzt zu der Funktion Argumente hinzufügen damit er sie der Funktion hello übergeben kann? mit
widget.bind('<Button-1>', hello(Argument))
geht's nicht.