OUJOOD.COM
Dans Tkinter, les variables de contrôle sont des objets intermédiaires qui font le lien entre votre code Python et les widgets. Quand la variable change, le widget se met à jour automatiquement — et inversement. Sans elles, vous devez appeler get() et config() manuellement à chaque changement.
Les quatre types disponibles
Tkinter propose quatre variables de contrôle selon le type de données à gérer : StringVar pour les chaînes de caractères, IntVar pour les entiers, DoubleVar pour les flottants, et BooleanVar pour les booléens. Toutes partagent les mêmes méthodes get() et set().
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("340x220")
# Création des quatre types
var_texte = tk.StringVar(value="valeur initiale")
var_entier = tk.IntVar(value=42)
var_decimal = tk.DoubleVar(value=3.14)
var_bool = tk.BooleanVar(value=True)
# Lecture et modification
print(var_texte.get()) # "valeur initiale"
var_texte.set("nouveau texte")
print(var_entier.get()) # 42
var_entier.set(100)
# Liaison avec un Label — le texte se met à jour automatiquement
tk.Label(fenetre, textvariable=var_texte, font=("Arial", 12)).pack(pady=20)
tk.Button(fenetre, text="Changer", command=lambda: var_texte.set("texte modifié")).pack()
fenetre.mainloop()
Le paramètre textvariable dans les widgets Label et Entry crée cette liaison. Dès que var_texte.set() est appelé n'importe où dans le code, tous les widgets liés à cette variable se mettent à jour sans intervention supplémentaire.
IntVar avec Checkbutton et Radiobutton
IntVar est le type associé aux Checkbutton et Radiobutton. Sa valeur reflète l'état coché ou non coché :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("320x200")
options = {
"Recevoir la newsletter": tk.IntVar(),
"Accepter les cookies": tk.IntVar(),
"Activer les notifications": tk.IntVar(value=1), # coché par défaut
}
for texte, var in options.items():
tk.Checkbutton(fenetre, text=texte, variable=var).pack(anchor="w", padx=20, pady=3)
def afficher():
for texte, var in options.items():
print(f"{texte} : {'oui' if var.get() else 'non'}")
tk.Button(fenetre, text="Valider", command=afficher).pack(pady=10)
fenetre.mainloop()
Avec IntVar, un Checkbutton coché vaut 1, décoché vaut 0. On peut aussi utiliser BooleanVar directement — le résultat est identique mais get() retourne True ou False au lieu de 1 ou 0.
Observer les changements avec trace_add
La méthode trace_add() permet d'exécuter une fonction automatiquement à chaque fois que la variable change. C'est l'équivalent d'un listener ou d'un observer :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("360x180")
recherche = tk.StringVar()
donnees = ["Python", "Pandas", "Pygame", "Pymunk", "Pillow", "Plotly", "PySide"]
def filtrer(*args):
terme = recherche.get().lower()
liste.delete(0, tk.END)
for item in donnees:
if terme in item.lower():
liste.insert(tk.END, item)
# "write" déclenche filtrer() à chaque frappe dans le champ
recherche.trace_add("write", filtrer)
tk.Entry(fenetre, textvariable=recherche, width=30).pack(pady=10)
liste = tk.Listbox(fenetre, height=6, width=30)
liste.pack()
filtrer() # remplir la liste au démarrage
fenetre.mainloop()
trace_add() accepte trois modes : "write" se déclenche quand la variable est modifiée, "read" quand elle est lue, et "unset" quand elle est supprimée. Dans la pratique, "write" est de loin le plus utilisé. La fonction de callback reçoit trois arguments automatiquement (*args) qu'on peut ignorer si on n'en a pas besoin.
Ces variables sont la clé de voûte des pages suivantes : les Checkbutton, Radiobutton et Spinbox en dépendent tous pour fonctionner proprement. Si vous utilisez Pandas pour traiter des données dans votre interface, StringVar et trace_add() sont aussi ce qui permet de filtrer un tableau NumPy en direct depuis un champ de recherche.
Par carabde | Mis à jour le 30 avril 2025