logo oujood
🔍

Le widget Radiobutton Tkinter

Radiobutton impose un choix unique dans un groupe : cocher l'un décoche automatiquement les autres. La clé : tous les boutons du groupe partagent la même variable.

OUJOOD.COM

Le widget Radiobutton fonctionne toujours en groupe. Contrairement au Checkbutton où chaque case est indépendante, les boutons radio partagent une même variable de contrôle — et c'est ce partage qui garantit qu'un seul bouton peut être actif à la fois.

Groupe de Radiobutton avec StringVar

Chaque bouton reçoit une value qui sera stockée dans la variable partagée quand il est sélectionné :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.title("Radiobutton")
fenetre.geometry("320x220")

# Variable partagée — sa valeur = value du bouton sélectionné
niveau = tk.StringVar(value="intermediaire")  # sélection par défaut

tk.Label(fenetre, text="Votre niveau :", font=("Arial", 11, "bold")).pack(
    anchor="w", padx=25, pady=(15, 8)
)

options = [
    ("Débutant",      "debutant"),
    ("Intermédiaire", "intermediaire"),
    ("Avancé",        "avance"),
    ("Expert",        "expert"),
]

for texte, valeur in options:
    tk.Radiobutton(
        fenetre,
        text=texte,
        variable=niveau,   # même variable pour tout le groupe
        value=valeur       # valeur stockée quand ce bouton est sélectionné
    ).pack(anchor="w", padx=40)

def confirmer():
    label_res.config(text=f"Niveau choisi : {niveau.get()}")

tk.Button(fenetre, text="Confirmer", command=confirmer).pack(pady=8)
label_res = tk.Label(fenetre, text="")
label_res.pack()

fenetre.mainloop()

Quand l'utilisateur sélectionne "Avancé", niveau.get() retourne "avance". La value n'a pas à correspondre au texte affiché — c'est ce qui permet d'avoir un label en français et une valeur technique en minuscules sans accents.

Radiobutton avec IntVar

On peut aussi utiliser des entiers comme valeurs — pratique quand la sélection correspond à un indice ou un identifiant :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("320x200")

abonnement = tk.IntVar(value=1)

plans = [
    (0, "Gratuit — 500 Mo",    "#e0e0e0"),
    (1, "Standard — 10 Go",    "#bbdefb"),
    (2, "Premium — illimité",  "#c8e6c9"),
]

tk.Label(fenetre, text="Choisissez un plan :", font=("Arial", 11, "bold")).pack(
    anchor="w", padx=20, pady=(12, 6)
)

for val, texte, couleur in plans:
    frame = tk.Frame(fenetre, bg=couleur)
    frame.pack(fill="x", padx=20, pady=2)
    tk.Radiobutton(
        frame, text=texte, variable=abonnement,
        value=val, bg=couleur, font=("Arial", 10)
    ).pack(anchor="w", padx=10, pady=4)

def choisir():
    noms = {0: "Gratuit", 1: "Standard", 2: "Premium"}
    label_choix.config(text=f"Plan sélectionné : {noms[abonnement.get()]}")

tk.Button(fenetre, text="Valider", command=choisir).pack(pady=6)
label_choix = tk.Label(fenetre, text="")
label_choix.pack()

fenetre.mainloop()

Réagir immédiatement au changement

Comme pour le Checkbutton, le paramètre command déclenche une fonction à chaque changement de sélection :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("340x180")

couleur_fond = tk.StringVar(value="#ffffff")

def appliquer():
    fenetre.configure(bg=couleur_fond.get())
    frame_btns.configure(bg=couleur_fond.get())
    label_titre.configure(bg=couleur_fond.get())

palettes = [
    ("Blanc",  "#ffffff"),
    ("Beige",  "#fff8e1"),
    ("Bleu",   "#e3f2fd"),
    ("Vert",   "#e8f5e9"),
]

label_titre = tk.Label(fenetre, text="Couleur de fond :", font=("Arial", 11))
label_titre.pack(pady=(15, 5))

frame_btns = tk.Frame(fenetre)
frame_btns.pack()

for texte, val in palettes:
    tk.Radiobutton(
        frame_btns, text=texte,
        variable=couleur_fond,
        value=val,
        command=appliquer   # déclenché à chaque sélection
    ).pack(side="left", padx=8)

fenetre.mainloop()

L'interface change de couleur dès qu'un bouton radio est sélectionné, sans qu'un bouton "Valider" soit nécessaire. C'est le comportement attendu pour les préférences visuelles ou les filtres en temps réel — similaire à ce qu'on ferait avec un Combobox pour des listes plus longues.

Par carabde | Mis à jour le 30 avril 2025