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