Fins ara hem vist com organitzar els elements dins d’una finestra utilitzant els gestors de disposició pack(), place() i grid(). El següent pas és fer que la interfície reaccioni a les accions de l’usuari: moviments del ratolí, clics, tecles del teclat, etc.
En Tkinter, aquestes accions s’anomenen events i es poden capturar mitjançant el mètode bind().
Un event és qualsevol acció que fa l’usuari sobre la finestra o els seus elements. Alguns exemples habituals són:
prémer una tecla del teclat
fer clic amb el ratolí
moure el ratolí
entrar o sortir amb el cursor d’un botó
Tkinter identifica cada event amb una cadena de text entre símbols < >. Alguns exemples habituals, encara que n'hi ha més, són:
<Button> → clic amb un botó del ratolí (<Button-1> per al botó esquerre i <Button-2> per al dret)
<Key> → qualsevol tecla premuda
<Return> → tecla Enter
<Enter> → el ratolí entra dins d’un widget
<Leave> → el ratolí surt d’un widget
El mètode bind() permet associar un event a una funció. La sintaxi general és: widget.bind(event, funció). Quan es produeix l’event, Tkinter crida automàticament la funció associada.
⚠️ Important: la funció ha de rebre un paràmetre, normalment anomenat event, encara que no el fem servir.
En aquest exemple crearem una finestra amb un botó que detecta quan el ratolí passa per damunt. Just en aquell moment, la finestra es mourà a una posició aleatòria de la pantalla, de manera que és impossible fer clic al botó.
Es crea una funció (reubicar) que canvia la posició de la finestra.
Aquesta funció rep un paràmetre event, que Tkinter envia automàticament.
Es generen coordenades aleatòries amb el mòdul random.
Amb geometry() es modifica la posició de la finestra.
Amb bind("<Enter>", reubicar) indiquem que:
quan el ratolí entra dins del botó
s’executi la funció reubicar
El resultat és una finestra que fuig del ratolí.
Copia i executa el programa i intenta clicar el botó.
Canvia l’event <Enter> per <Button-1> i <Leave>. Observa què passa en cada cas.
Modifica els valors màxims de randint() i comprova com afecta al moviment de la finestra.
Crea un programa amb aquestes característiques: una finestra amb una etiqueta i un botó. Quan el ratolí s’acosta al botó, aquest:
canvia de color
canvia el text
es mou dins la finestra
💡 Pistes:
Fes servir els events <Enter> i <Leave>
Pots utilitzar config() per canviar propietats del botó
Si vols moure’l, pots usar place()
👉 Opcional: afegeix un comptador que indiqui quants cops l’usuari ha “espantat” el botó.