OUJOOD.COM
Le module tkinter.ttk (Themed Tk) est une surcouche à Tkinter qui propose deux choses : des versions améliorées des widgets classiques qui adoptent l'apparence native du système d'exploitation, et des widgets exclusifs absents du module classique — Notebook, Treeview, Progressbar, Separator, Combobox.
Widgets classiques vs ttk
La différence visuelle est immédiate sur Windows et macOS — les widgets ttk épousent le style natif de la plateforme :
import tkinter as tk
from tkinter import ttk
fenetre = tk.Tk()
fenetre.title("tk vs ttk")
fenetre.geometry("380x200")
frame_gauche = tk.Frame(fenetre, bd=1, relief="groove")
frame_gauche.pack(side="left", fill="both", expand=True, padx=10, pady=10)
frame_droite = tk.Frame(fenetre, bd=1, relief="groove")
frame_droite.pack(side="left", fill="both", expand=True, padx=10, pady=10)
tk.Label(frame_gauche, text="Widgets tk", font=("Arial", 9, "bold")).pack(pady=4)
tk.Button(frame_gauche, text="Button").pack(pady=3)
tk.Entry(frame_gauche, width=14).pack(pady=3)
tk.Checkbutton(frame_gauche, text="Option").pack(pady=3)
tk.Label(frame_droite, text="Widgets ttk", font=("Arial", 9, "bold")).pack(pady=4)
ttk.Button(frame_droite, text="Button").pack(pady=3)
ttk.Entry(frame_droite, width=14).pack(pady=3)
ttk.Checkbutton(frame_droite, text="Option").pack(pady=3)
fenetre.mainloop()
Une différence importante : les widgets ttk ne supportent pas directement les paramètres de style comme bg, fg ou font dans le constructeur. Ces attributs passent par ttk.Style — détaillé dans la page sur les thèmes ttk.
Notebook — onglets
ttk.Notebook est le widget d'onglets, absent du module classique :
import tkinter as tk
from tkinter import ttk
fenetre = tk.Tk()
fenetre.title("Notebook")
fenetre.geometry("420x280")
notebook = ttk.Notebook(fenetre)
notebook.pack(fill="both", expand=True, padx=10, pady=10)
onglet1 = tk.Frame(notebook, bg="#e3f2fd")
onglet2 = tk.Frame(notebook, bg="#e8f5e9")
onglet3 = tk.Frame(notebook, bg="#fff8e1")
notebook.add(onglet1, text=" Général ")
notebook.add(onglet2, text=" Avancé ")
notebook.add(onglet3, text=" Aide ")
tk.Label(onglet1, text="Contenu — onglet Général",
bg="#e3f2fd", font=("Arial", 12)).pack(expand=True)
tk.Label(onglet2, text="Contenu — onglet Avancé",
bg="#e8f5e9", font=("Arial", 12)).pack(expand=True)
tk.Label(onglet3, text="Contenu — onglet Aide",
bg="#fff8e1", font=("Arial", 12)).pack(expand=True)
def sur_changement(event):
index = notebook.index(notebook.select())
print(f"Onglet actif : {index}")
notebook.bind("<>", sur_changement)
fenetre.mainloop()
Chaque onglet est un Frame ordinaire passé à notebook.add(). L'événement <<NotebookTabChanged>> se déclenche à chaque changement. Pour naviguer par programme : notebook.select(index).
Separator et LabelFrame ttk
import tkinter as tk
from tkinter import ttk
fenetre = tk.Tk()
fenetre.geometry("360x260")
frame_info = ttk.LabelFrame(fenetre, text="Informations personnelles", padding=10)
frame_info.pack(fill="x", padx=15, pady=10)
ttk.Label(frame_info, text="Nom :").grid(row=0, column=0, sticky="e", pady=3)
ttk.Entry(frame_info, width=20).grid(row=0, column=1, padx=8)
ttk.Label(frame_info, text="Email :").grid(row=1, column=0, sticky="e", pady=3)
ttk.Entry(frame_info, width=20).grid(row=1, column=1, padx=8)
# Ligne de séparation horizontale
ttk.Separator(fenetre, orient="horizontal").pack(fill="x", padx=15, pady=5)
frame_opt = ttk.LabelFrame(fenetre, text="Options", padding=10)
frame_opt.pack(fill="x", padx=15)
ttk.Checkbutton(frame_opt, text="Recevoir les notifications").pack(anchor="w")
ttk.Checkbutton(frame_opt, text="Profil public").pack(anchor="w")
ttk.Button(fenetre, text="Enregistrer").pack(pady=12)
fenetre.mainloop()
ttk.Separator trace une ligne de séparation horizontale ou verticale. ttk.LabelFrame est l'équivalent ttk du Frame classique avec un titre intégré dans la bordure. Le paramètre padding ajoute un espace interne. Pour personnaliser les couleurs et polices des widgets ttk, la page sur les thèmes ttk détaille ttk.Style.
Par carabde | Mis à jour le 30 avril 2025