logo oujood
🔍

Les boîtes de dialogue Tkinter (messagebox)

messagebox fournit des boîtes de dialogue prêtes à l'emploi : information, avertissement, erreur, confirmation. Six fonctions à connaître pour couvrir tous les cas courants.

OUJOOD.COM

Le module tkinter.messagebox fournit des boîtes de dialogue standard — les mêmes que celles du système d'exploitation — sans qu'on ait besoin de créer une Toplevel manuellement. Elles sont bloquantes : le code s'arrête jusqu'à ce que l'utilisateur clique sur un bouton.

Les boîtes d'information

Trois fonctions pour afficher un message sans attendre de choix :

📋 Copier le code

import tkinter as tk
from tkinter import messagebox

fenetre = tk.Tk()
fenetre.geometry("360x200")
fenetre.withdraw()  # cache la fenêtre principale pour cet exemple

# Information — icône bleue i
messagebox.showinfo(
    title="Information",
    message="La sauvegarde a réussi.\nFichier : rapport.pdf"
)

# Avertissement — icône triangle jaune
messagebox.showwarning(
    title="Attention",
    message="La connexion est lente.\nLe chargement peut prendre plus de temps."
)

# Erreur — icône rouge X
messagebox.showerror(
    title="Erreur",
    message="Impossible d'ouvrir le fichier.\nVérifiez les permissions."
)

fenetre.destroy()

Ces trois fonctions retournent toujours "ok" — elles ne servent qu'à informer. L'icône et le son système correspondent au type : showinfo pour les succès et informations neutres, showwarning pour les situations à surveiller, showerror pour les erreurs bloquantes.

Les boîtes de confirmation

Trois fonctions pour demander une décision à l'utilisateur :

📋 Copier le code

import tkinter as tk
from tkinter import messagebox

fenetre = tk.Tk()
fenetre.title("Confirmations")
fenetre.geometry("360x220")

def tester_okcancel():
    resultat = messagebox.askokcancel("Confirmer", "Supprimer ce fichier ?")
    # True si OK, False si Annuler
    label.config(text=f"askokcancel → {resultat}")

def tester_yesno():
    resultat = messagebox.askyesno("Question", "Voulez-vous sauvegarder ?")
    # True si Oui, False si Non
    label.config(text=f"askyesno → {resultat}")

def tester_yesnocancel():
    resultat = messagebox.askyesnocancel("Fermer", "Sauvegarder avant de quitter ?")
    # True si Oui, False si Non, None si Annuler
    label.config(text=f"askyesnocancel → {resultat}")

tk.Button(fenetre, text="askokcancel",     command=tester_okcancel,    width=18).pack(pady=6)
tk.Button(fenetre, text="askyesno",        command=tester_yesno,       width=18).pack(pady=6)
tk.Button(fenetre, text="askyesnocancel",  command=tester_yesnocancel, width=18).pack(pady=6)

label = tk.Label(fenetre, text="Cliquez un bouton", fg="#555")
label.pack(pady=10)

fenetre.mainloop()

Exemple pratique — protection de suppression

Le cas d'usage le plus courant : demander confirmation avant une action destructrice :

📋 Copier le code

import tkinter as tk
from tkinter import messagebox, ttk

fenetre = tk.Tk()
fenetre.title("Gestionnaire")
fenetre.geometry("380x260")

tableau = ttk.Treeview(fenetre, columns=("nom", "taille"),
                       show="headings", height=6)
tableau.heading("nom",   text="Fichier")
tableau.heading("taille",text="Taille")
tableau.column("nom",    width=220)
tableau.column("taille", width=100, anchor="center")
tableau.pack(padx=15, pady=15, fill="both", expand=True)

fichiers = [("rapport_2024.pdf", "2.4 Mo"), ("donnees.csv", "15 Mo"),
            ("presentation.pptx","8.1 Mo"), ("backup.zip",  "45 Mo")]
for f in fichiers:
    tableau.insert("", tk.END, values=f)

def supprimer():
    selection = tableau.selection()
    if not selection:
        messagebox.showwarning("Aucune sélection", "Sélectionnez un fichier à supprimer.")
        return
    nom = tableau.item(selection[0])["values"][0]
    if messagebox.askyesno("Confirmer", f"Supprimer « {nom} » définitivement ?"):
        tableau.delete(selection[0])
        messagebox.showinfo("Supprimé", f"« {nom} » a été supprimé.")

tk.Button(fenetre, text="Supprimer", command=supprimer).pack(pady=5)

fenetre.mainloop()

La séquence — vérifier la sélection, demander confirmation, exécuter, informer — est le workflow standard pour les actions destructrices. messagebox.showwarning pour les cas non critiques (rien de sélectionné), messagebox.askyesno pour la confirmation, messagebox.showinfo pour le retour positif. Pour des dialogues plus personnalisés que ce que messagebox propose, la Toplevel reste la solution.

Par carabde | Mis à jour le 30 avril 2025