logo oujood
🔍

Titre et icône d'une fenêtre Tkinter

Deux lignes suffisent pour personnaliser la barre de titre. Voici comment modifier le titre dynamiquement et charger une icône PNG ou ICO selon la plateforme.

OUJOOD.COM

Par défaut, une fenêtre Tkinter s'intitule « tk » et arbore l'icône Tk générique. Deux méthodes permettent de personnaliser ça — title() pour le texte et iconphoto() ou iconbitmap() pour l'image.

Définir et modifier le titre

title() peut être appelée à tout moment, pas seulement à la création :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.title("Mon application")
fenetre.geometry("380x180")

contenu_modifie = [False]

def modifier_contenu():
    contenu_modifie[0] = True
    # Ajouter un astérisque pour signaler des modifications non sauvegardées
    fenetre.title("Mon application *")
    label.config(text="Contenu modifié (non sauvegardé)")

def sauvegarder():
    contenu_modifie[0] = False
    fenetre.title("Mon application")
    label.config(text="Sauvegardé ✓")

frame = tk.Frame(fenetre)
frame.pack(pady=20)
tk.Button(frame, text="Modifier",     command=modifier_contenu).pack(side="left", padx=8)
tk.Button(frame, text="Sauvegarder",  command=sauvegarder).pack(side="left", padx=8)
label = tk.Label(fenetre, text="Aucune modification")
label.pack()

fenetre.mainloop()

Afficher un astérisque dans le titre pour signaler des modifications non sauvegardées est une convention courante dans les éditeurs de texte et les IDEs. C'est une façon simple d'informer l'utilisateur sans boîte de dialogue.

Icône avec iconphoto() — PNG recommandé

iconphoto() accepte un objet PhotoImage chargé depuis un fichier PNG ou GIF :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.title("Application avec icône")
fenetre.geometry("360x160")

# Charger une icône PNG (16x16 ou 32x32 recommandé)
try:
    icone = tk.PhotoImage(file="icone.png")
    fenetre.iconphoto(True, icone)
    # True : applique l'icône à toutes les fenêtres futures de l'application
except tk.TclError:
    pass  # le fichier n'existe pas — on continue sans icône

tk.Label(fenetre, text="Regardez l'onglet dans la barre des tâches",
         font=("Arial", 11), wraplength=300).pack(expand=True)

fenetre.mainloop()

PhotoImage supporte nativement les PNG et les GIF — pas les JPEG. Pour des formats supplémentaires (JPEG, ICO, SVG), il faut la bibliothèque Pillow (pip install Pillow) et utiliser ImageTk.PhotoImage à la place. La variable icone doit rester en vie (stockée dans une variable, pas anonyme) — sinon Python la supprime par garbage collection et l'icône disparaît.

Icône avec iconbitmap() — format ICO sur Windows

Sur Windows, iconbitmap() avec un fichier .ico donne le meilleur résultat dans la barre des tâches :

📋 Copier le code

import tkinter as tk
import platform

fenetre = tk.Tk()
fenetre.title("Icône multiplateforme")
fenetre.geometry("340x140")

# Adapter la méthode selon le système
if platform.system() == "Windows":
    try:
        fenetre.iconbitmap("icone.ico")
    except tk.TclError:
        pass
else:
    try:
        icone = tk.PhotoImage(file="icone.png")
        fenetre.iconphoto(True, icone)
    except tk.TclError:
        pass

tk.Label(fenetre, text=f"Système : {platform.system()}",
         font=("Arial", 12)).pack(expand=True)

fenetre.mainloop()

iconbitmap() fonctionne principalement sous Windows — elle peut provoquer des erreurs sur Linux ou macOS selon la version de Tk installée. L'approche conditionnelle avec platform.system() est plus robuste pour du code multiplateforme. Pour les projets qui intègrent des images plus largement, Pillow est de toute façon une dépendance habituelle.

Par carabde | Mis à jour le 30 avril 2025