OUJOOD.COM
Le paramètre command d'un Button gère le clic gauche standard et rien d'autre. Dès qu'on veut réagir à une touche clavier, un double-clic, un survol ou un clic droit, c'est bind() qu'il faut utiliser. La méthode est disponible sur tous les widgets Tkinter.
Syntaxe de base
bind() prend deux arguments : une chaîne décrivant l'événement entre chevrons, et la fonction à appeler. Cette fonction reçoit automatiquement un objet event avec des informations sur ce qui s'est passé :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("360x200")
def sur_clic(event):
label.config(text=f"Clic à x={event.x}, y={event.y}")
def sur_clic_droit(event):
label.config(text="Clic droit détecté !")
def sur_double_clic(event):
label.config(text="Double-clic !")
zone = tk.Label(fenetre, text="Cliquez ici", bg="#e3f2fd",
width=30, height=5, font=("Arial", 12))
zone.pack(pady=20)
zone.bind("", sur_clic) # clic gauche
zone.bind("", sur_clic_droit) # clic droit
zone.bind("", sur_double_clic) # double-clic gauche
label = tk.Label(fenetre, text="En attente...")
label.pack()
fenetre.mainloop()
L'objet event contient entre autres event.x et event.y (coordonnées du curseur dans le widget), event.x_root et event.y_root (coordonnées dans l'écran), event.widget (le widget source) et event.keysym pour les événements clavier.
Événements clavier
On peut écouter une touche précise ou n'importe quelle frappe sur un widget ou sur toute la fenêtre :
import tkinter as tk
fenetre = tk.Tk()
fenetre.title("Événements clavier")
fenetre.geometry("380x200")
def sur_touche(event):
label_info.config(text=f"Touche : {event.keysym} | Caractère : {event.char!r}")
def sur_entree(event):
label_info.config(text="Entrée validée !", fg="#2e7d32")
champ = tk.Entry(fenetre, width=30, font=("Arial", 12))
champ.pack(pady=20)
champ.focus_set() # donne le focus au champ dès l'ouverture
# Toute frappe dans le champ
champ.bind("", sur_touche)
# Touche Entrée uniquement
champ.bind("", sur_entree)
label_info = tk.Label(fenetre, text="Tapez quelque chose...", fg="#555")
label_info.pack()
fenetre.mainloop()
<Key> capte toutes les frappes. <Return> capte la touche Entrée. On peut cibler n'importe quelle touche par son nom : <Escape>, <space>, <Tab>, <F1>... Les modificateurs se combinent avec un tiret : <Control-s> pour Ctrl+S, <Shift-Tab> pour Maj+Tab.
Événements de survol et de focus
Utiles pour des retours visuels dynamiques sans JavaScript — l'équivalent d'un :hover CSS :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("340x180")
def entrer(event):
event.widget.config(bg="#1565c0", fg="white")
def sortir(event):
event.widget.config(bg="#e3f2fd", fg="#1565c0")
for texte in ["Option A", "Option B", "Option C"]:
btn = tk.Label(
fenetre, text=texte,
bg="#e3f2fd", fg="#1565c0",
font=("Arial", 12), padx=20, pady=8,
cursor="hand2"
)
btn.pack(fill="x", padx=30, pady=4)
btn.bind("", entrer) # souris entre dans le widget
btn.bind("", sortir) # souris quitte le widget
fenetre.mainloop()
event.widget retourne le widget qui a déclenché l'événement — ici, le Label survolé. Cela permet d'utiliser les mêmes fonctions entrer et sortir pour tous les labels sans les dupliquer.
La combinaison bind() + callbacks bien structurés couvre la grande majorité des besoins d'interaction. Pour les raccourcis clavier globaux qui fonctionnent même quand aucun widget n'a le focus, on peut binder directement la fenêtre : fenetre.bind("<Control-q>", quitter).
Par carabde | Mis à jour le 30 avril 2025