Le paquet tkinter nous offre la possibilité d'afficher un message dans une fenêtre popup.
Pour accéder à cette fonctionnalité, il faut ajouter une seconde instruction import :
from tkinter import *
from tkinter import messagebox
Pourquoi un second import est-il nécessaire alors que le module messagebox fait partie du paquet tkinter ? C'est simplement parce que ce module n'est pas chargé automatiquement lors du chargement de tkinter.
La fonction showinfo() permet d'afficher un message d'information avec un bouton OK et une icône « information ».
Les paramètres de cette fonction sont :
Il est possible d'ajouter d'autres paramètres pour spécifier le bouton par défaut (qui sera cliqué si l'usager appuie sur Entrée), l'icône à afficher ainsi que le parent de la fenêtre popup, c'est-à-dire au-dessus de quel widget elle doit apparaître. Dans la pratique, les valeurs par défaut sont suffisante et on utilisera rarement ces paramètres.
Ex :
messagebox.showinfo('Information', 'Le produit a été ajouté avec succès !')
Les fonctions showwarning() et showerror() fonctionnent sur le même principe mais l'icône affiché représente, selon le cas, un avertissement ou une erreur.
Ex :
messagebox.showwarning('Attention', 'Aucun produit ne correspond aux critères demandés.')
Ex :
messagebox.showerror('Erreur', 'Un problème a empêché la suppression du produit.')
La fonction askquestion() permet d'afficher un popup avec une question suivie des boutons Oui et Non. La fonction retournera la chaîne 'yes', en lettres minuscules, si l'usager a cliqué sur le bouton Oui ou 'no' s'il a cliqué sur le bouton Non.
Ex :
reponse = messagebox.askquestion('Question', 'Désirez-vous vraiment supprimer ce produit ?')
# askquestion retourne 'yes' ou 'no'
if reponse == 'yes':
...
Il est possible d'afficher une question avec des boutons ou des comportements différents, par exemple :
Ex :
reponse = messagebox.askyesno('Question', 'Désirez-vous vraiment supprimer ce produit ?')
# askyesno retourne True ou False
if reponse:
...
Ex :
reponse = messagebox.askyesnocancel('Question', 'Désirez-vous enregistrer les modifications avant de quitter ?')
if reponse == None:
...
elif reponse:
...
elif not reponse:
...
Attention : il peut y avoir confusion entre les valeurs False et None. En effet, lorsque la réponse vaut None, les deux affirmations suivantes sont vraies : not reponse et reponse == None. Pour régler ce problème, il suffit de tester si la réponse est None avant de tester si elle est False. Sans cette précaution, le code suivant traiterait toujours la réponse Annuler comme si l'usager avait cliqué sur Non.
Ex :
reponse = messagebox.askyesnocancel('Question', 'Désirez-vous enregistrer les modifications ?')
if reponse:
messagebox.showinfo('Réponse', 'oui')
Par contre, le code suivant fonctionnera comme il faut. Notez que le test est reponse == False, ce qui n'englobe pas le cas où la réponse est à None.
Ex :
reponse = messagebox.askyesnocancel('Question', 'Désirez-vous enregistrer les modifications ?')
if reponse:
messagebox.showinfo('Réponse', 'oui')
elif reponse == False:
messagebox.showinfo('Réponse', 'non')
elif reponse == None:
messagebox.showinfo('Réponse', 'annuler')
« Fenêtres de dialogues ». Tkinter pour ISN. http://tkinter.fdex.eu/doc/popdial.html
▼Publicité