Scrivendo un piccolo programma in Python 3 e Tkinter, mi sono imbattuto nel seguente problema:
dovevo collegare l'evento click di diversi Button ad un'unica funzione, in modo che premendone uno la funzione stessa fosse in grado di determinare quale Button avesse sollevato l'evento e cambiasse il testo sul pulsante utilizzato.
Detto in altri termini:
premendo su Pulsante_1 il testo deve essere modificato da "Pulsante 1" a "Altro Nome 1".
premendo su Pulsante_2 il testo deve essere modificato da "Pulsante 2" a "Altro Nome 2"
...
Facendo qualche esperimento e diverse ricerche nella rete, sono riuscito a capire che attraverso -evento.widget- si ottiene il nome del widget che ha reagito al click del mouse. Premendo Pulsante_1 si ottiene .!button, premendo Pulsante_2 si ottiene .!button2, e così via... Sapendo questo ho scritto il codice seguente che mi risolve il problema.
NOTA - il numero dei button (.!button, .!button2, .!button3, .!button4 ...) dipende dall'ordine con cui sono stati istanziati, non dal nome che è stato assegnato loro.
import tkinter as tk from tkinter import * class MiaClass: def __init__(self, master): self.pulsante_1=tk.Button(master, text="Pulsante 1") self.pulsante_1.bind("<Button-1>", self.cambia_testo) self.pulsante_1.pack() self.pulsante_2=tk.Button(master, text="Pulsante 2") self.pulsante_2.bind("<Button-1>", self.cambia_testo) self.pulsante_2.pack() def cambia_testo(self, evento): testo=str(evento.widget) if testo.endswith("button"): self.pulsante_1.configure(text="Atro nome 1") if testo.endswith("button2"): self.pulsante_2.configure(text="Atro nome 2") finestra=Tk() miaClass=MiaClass(finestra) finestra.mainloop()