171 votes

Comment créer une boîte à messages simple en Python ?

Je cherche le même effet que alert() en JavaScript.

J'ai écrit un simple interpréteur web cet après-midi en utilisant Twisted.web. En gros, vous soumettez un bloc de code Python via un formulaire, et le client vient le saisir et l'exécuter. Je veux être capable de faire un simple message popup, sans avoir à réécrire tout un tas de code passe-partout wxPython ou TkInter à chaque fois (puisque le code est soumis via un formulaire et disparaît ensuite).

J'ai essayé tkMessageBox :

import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")

mais cela ouvre une autre fenêtre en arrière-plan avec une icône tk. Je n'en veux pas. Je cherchais du code wxPython simple, mais il fallait toujours configurer une classe et entrer dans une boucle d'application, etc. N'existe-t-il pas un moyen simple, sans prise de tête, de créer une boîte de messages en Python ?

359voto

user2140260 Points 481

Vous pourriez utiliser un import et un code à une seule ligne comme ceci :

import ctypes  # An included library with Python install.   
ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)

Ou définissez une fonction (Mbox) comme suit :

import ctypes  # An included library with Python install.
def Mbox(title, text, style):
    return ctypes.windll.user32.MessageBoxW(0, text, title, style)
Mbox('Your title', 'Your text', 1)

Notez que les styles sont les suivants :

##  Styles:
##  0 : OK
##  1 : OK | Cancel
##  2 : Abort | Retry | Ignore
##  3 : Yes | No | Cancel
##  4 : Yes | No
##  5 : Retry | Cancel 
##  6 : Cancel | Try Again | Continue

Amusez-vous bien !

Note : modifié pour utiliser MessageBoxW au lieu de MessageBoxA

3 votes

Exactement ce que je recherchais. L'OP aussi d'après ce qu'il semble. Il devrait être marqué comme la réponse !

3 votes

Meh. J'ai peut-être parlé trop vite. Je n'obtiens qu'un seul caractère pour le titre et le message. C'est bizarre...

21 votes

J'ai dû utiliser MessageBoxW au lieu de MessageBoxA.

61voto

Ryan Ginstrom Points 8354

Avez-vous regardé easygui ?

import easygui

easygui.msgbox("This is a message!", title="simple gui")

10 votes

Ce n'est pas tkinter, ce n'est pas livré par défaut, étrange, qui a intérêt à introduire une fonctionnalité aussi simple pour apporter des dépendances inutiles ?

11 votes

En fait gekannt, easygui est un wrapper autour de tkinter. Oui, c'est une dépendance supplémentaire, mais c'est un seul fichier python. Certains développeurs peuvent penser que la dépendance en vaut la peine pour implémenter une interface graphique très simple.

22voto

Lewis Cowles Points 151

Vous pouvez également positionner l'autre fenêtre avant de la retirer afin de positionner votre message.

#!/usr/bin/env python

from Tkinter import *
import tkMessageBox

window = Tk()
window.wm_withdraw()

#message at x:200,y:200
window.geometry("1x1+200+200")#remember its .geometry("WidthxHeight(+or-)X(+or-)Y")
tkMessageBox.showerror(title="error",message="Error Message",parent=window)

#centre screen message
window.geometry("1x1+"+str(window.winfo_screenwidth()/2)+"+"+str(window.winfo_screenheight()/2))
tkMessageBox.showinfo(title="Greetings", message="Hello World!")

3 votes

Existe-t-il une méthode permettant de ne pas avoir à sonder l'écran de l'utilisateur ? ok dans la section tkMessageBox et il est traité automatiquement ?

0 votes

@varsha_holla Ce n'est pas comme ça que les boîtes de messages fonctionnent. Vous pourriez envisager de créer une fenêtre standard avec une minuterie.

22voto

Jotaf Points 101

Le code que vous avez présenté est parfait ! Vous devez juste créer explicitement l'"autre fenêtre en arrière-plan" et la cacher, avec ce code :

import Tkinter
window = Tkinter.Tk()
window.wm_withdraw()

Juste avant votre boîte à messages.

5 votes

J'ai dû ajouter "window.destroy()" à la fin pour qu'il se termine proprement.

10voto

Steven Points 10243

Sur Mac, la bibliothèque standard de python possède un module appelé EasyDialogs . Il existe également une version Windows (basée sur ctypes) à l'adresse suivante http://www.averdevelopment.com/python/EasyDialogs.html

Si cela vous importe : il utilise des dialogues natifs et ne dépend pas de Tkinter comme le déjà mentionné easygui mais il n'a peut-être pas autant de fonctionnalités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X