logo oujood
🔍

Le widget Checkbutton Tkinter

Checkbutton est la case à cocher de Tkinter. Coché ou non coché, son état se lit via une variable de contrôle — IntVar ou BooleanVar selon le besoin.

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 :

📋 Copier le code

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 :

📋 Copier le code

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 :

📋 Copier le code

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