OUJOOD.COM
Le widget Checkbutton représente une case à cocher — l'utilisateur peut l'activer ou la désactiver indépendamment des autres cases. C'est la différence avec le Radiobutton, où un seul choix est possible dans un groupe. Pour lire l'état d'un Checkbutton, il faut obligatoirement une variable de contrôle.
Checkbutton simple avec IntVar
La liaison se fait via le paramètre variable :
import tkinter as tk
fenetre = tk.Tk()
fenetre.title("Checkbutton simple")
fenetre.geometry("320x180")
var_newsletter = tk.IntVar()
var_conditions = tk.IntVar(value=1) # coché par défaut
tk.Checkbutton(
fenetre,
text="Recevoir la newsletter",
variable=var_newsletter
).pack(anchor="w", padx=30, pady=(20, 5))
tk.Checkbutton(
fenetre,
text="Accepter les conditions d'utilisation",
variable=var_conditions
).pack(anchor="w", padx=30)
def afficher():
nl = "oui" if var_newsletter.get() else "non"
cgu = "oui" if var_conditions.get() else "non"
label.config(text=f"Newsletter : {nl} | CGU : {cgu}")
tk.Button(fenetre, text="Valider", command=afficher).pack(pady=12)
label = tk.Label(fenetre, text="")
label.pack()
fenetre.mainloop()
Un IntVar coché vaut 1, décoché vaut 0. On peut utiliser BooleanVar à la place — le comportement est identique mais get() retourne True ou False, ce qui est parfois plus lisible dans les conditions.
Groupe de cases à cocher dynamique
Quand les options viennent d'une liste, on génère les Checkbutton en boucle et on stocke les variables dans un dictionnaire :
import tkinter as tk
fenetre = tk.Tk()
fenetre.title("Options")
fenetre.geometry("320x250")
competences = ["Python", "JavaScript", "HTML/CSS", "SQL", "Git"]
vars_comp = {}
tk.Label(fenetre, text="Vos compétences :", font=("Arial", 11, "bold")).pack(
anchor="w", padx=20, pady=(15, 5)
)
for comp in competences:
var = tk.BooleanVar()
vars_comp[comp] = var
tk.Checkbutton(fenetre, text=comp, variable=var).pack(anchor="w", padx=30)
def afficher_selection():
choisies = [c for c, v in vars_comp.items() if v.get()]
if choisies:
label.config(text=", ".join(choisies))
else:
label.config(text="Aucune sélection")
tk.Button(fenetre, text="Valider", command=afficher_selection).pack(pady=10)
label = tk.Label(fenetre, text="", fg="#1565c0")
label.pack()
fenetre.mainloop()
La compréhension de liste [c for c, v in vars_comp.items() if v.get()] récupère en une ligne toutes les options cochées. C'est le pattern standard pour ce type de formulaire.
Réagir au changement d'état
Pour déclencher une action immédiatement quand une case est cochée ou décochée, deux options : le paramètre command ou un trace_add sur la variable :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("340x180")
var_mode = tk.BooleanVar()
def basculer_mode():
if var_mode.get():
fenetre.configure(bg="#212121")
label_info.config(text="Mode sombre activé", bg="#212121", fg="#f5f5f5")
cb.config(bg="#212121", fg="#f5f5f5", selectcolor="#424242",
activebackground="#212121", activeforeground="#f5f5f5")
else:
fenetre.configure(bg="#f5f5f5")
label_info.config(text="Mode clair activé", bg="#f5f5f5", fg="#212121")
cb.config(bg="#f5f5f5", fg="#212121", selectcolor="white",
activebackground="#f5f5f5", activeforeground="#212121")
cb = tk.Checkbutton(
fenetre,
text="Mode sombre",
variable=var_mode,
command=basculer_mode, # appelé à chaque changement d'état
font=("Arial", 12)
)
cb.pack(pady=30)
label_info = tk.Label(fenetre, text="Mode clair activé", font=("Arial", 11))
label_info.pack()
fenetre.mainloop()
Le paramètre command sur un Checkbutton fonctionne comme sur un Button — la fonction est appelée chaque fois que l'état change, que l'utilisateur coche ou décoche. Pour récupérer l'état depuis command, on lit la variable liée : var_mode.get().
Par carabde | Mis à jour le 30 avril 2025