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é :
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 :
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 :
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