¿Cómo puedo crear un cuadro de mensaje simple en Python?

Estoy buscando el mismo efecto que alert() en JavaScript.

Escribí un intérprete basado en la web simple esta tarde usando Twisted.web. Básicamente, usted envía un bloque de código Python a través de un formulario, y el cliente viene, lo toma y lo ejecuta. Quiero poder hacer un mensaje emergente simple, sin tener que volver a escribir un montón de código repetitivo wxPython o TkInter cada vez (ya que el código se envía a través de un formulario y luego desaparece).

He intentado tkMessageBox:

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

pero esto abre otra ventana en el fondo con un icono tk. No quiero esto Estaba buscando un código simple de wxPython, pero siempre requería configurar una clase e ingresar un bucle de aplicación, etc. ¿No hay una forma simple y sin inconvenientes de crear un cuadro de mensaje en Python?

Podría usar un código de importación y de una sola línea como este:

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

O defina una función (Mbox) así:

 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) 

Tenga en cuenta que los estilos son los siguientes:

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

¡Que te diviertas!

Nota: editado para usar MessageBoxW lugar de MessageBoxA

¿Has mirado easygui ?

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

También puede colocar la otra ventana antes de retirarla para que coloque su mensaje.

 #!/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!") 

¡El código que presentaste está bien! Solo necesita crear explícitamente la “otra ventana en segundo plano” y ocultarla, con este código:

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

Justo antes de su mensaje.

En Mac, la biblioteca estándar de python tiene un módulo llamado EasyDialogs . También hay una versión de Windows (basada en ctypes) en http://www.averdevelopment.com/python/EasyDialogs.html

Si te importa: usa diálogos nativos y no depende de Tkinter como el ya mencionado easygui , pero puede que no tenga tantas funciones.

En Windows, puedes usar ctypes con la librería user32 :

 from ctypes import c_int, WINFUNCTYPE, windll from ctypes.wintypes import HWND, LPCSTR, UINT prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT) paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0) MessageBox = prototype(("MessageBoxA", windll.user32), paramflags) MessageBox() MessageBox(text="Spam, spam, spam") MessageBox(flags=2, text="foo bar") 

El módulo PyMsgBox hace exactamente esto. Tiene funciones de cuadro de mensaje que siguen las convenciones de nomenclatura de JavaScript: alert (), confirm (), prompt () y password () (que es prompt () pero usa * cuando escribe). Estas funciones bloquean las llamadas hasta que el usuario hace clic en el botón Aceptar / Cancelar. Es un módulo Python puro, multiplataforma, sin dependencias.

Instalar con: pip install PyMsgBox

Uso de la muestra:

 >>> import pymsgbox >>> pymsgbox.alert('This is an alert!', 'Title') >>> response = pymsgbox.prompt('What is your name?') 

Documentación completa en http://pymsgbox.readthedocs.org/en/latest/

 import ctypes ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1) 

El último número (aquí 1) se puede cambiar para cambiar el estilo de la ventana (¡no solo los botones!):

 ## Button styles: # 0 : OK # 1 : OK | Cancel # 2 : Abort | Retry | Ignore # 3 : Yes | No | Cancel # 4 : Yes | No # 5 : Retry | No # 6 : Cancel | Try Again | Continue ## To also change icon, add these values to previous number # 16 Stop-sign icon # 32 Question-mark icon # 48 Exclamation-point icon # 64 Information-sign icon consisting of an 'i' in a circle 

Por ejemplo,

 ctypes.windll.user32.MessageBoxW(0, "That's an error", "Warning!", 16) 

le dará esto :

introduzca la descripción de la imagen aquí

Utilizar

 from tkinter.messagebox import * Message([master], title="[title]", message="[message]") 

La ventana maestra tiene que ser creada antes. Esto es para Python 3. Esto no es para wxPython, sino para tkinter.

 import sys from tkinter import * def mhello(): pass return mGui = Tk() ment = StringVar() mGui.geometry('450x450+500+300') mGui.title('My youtube Tkinter') mlabel = Label(mGui,text ='my label').pack() mbutton = Button(mGui,text ='ok',command = mhello,fg = 'red',bg='blue').pack() mEntry = entry().pack 

No es el mejor, aquí está mi cuadro de mensaje básico utilizando solo tkinter.

 #Python 3.4 from tkinter import messagebox as msg; import tkinter as tk; def MsgBox(title, text, style): box = [ msg.showinfo, msg.showwarning, msg.showerror, msg.askquestion, msg.askyesno, msg.askokcancel, msg.askretrycancel, ]; tk.Tk().withdraw(); #Hide Main Window. if style in range(7): return box[style](title, text); if __name__ == '__main__': Return = MsgBox(#Use Like This. 'Basic Error Exemple', ''.join( [ 'The Basic Error Exemple a problem with test', '\n', 'and is unable to continue. The application must close.', '\n\n', 'Error code Test', '\n', 'Would you like visit http://wwww.basic-error-exemple.com/ for', '\n', 'help?', ] ), 2, ); print( Return ); """ Style | Type | Button | Return ------------------------------------------------------ 0 Info Ok 'ok' 1 Warning Ok 'ok' 2 Error Ok 'ok' 3 Question Yes/No 'yes'/'no' 4 YesNo Yes/No True/False 5 OkCancel Ok/Cancel True/False 6 RetryCancal Retry/Cancel True/False """ 

revisa mi módulo de python: pip install quickgui (Requiere wxPython, pero no requiere conocimiento de wxPython) https://pypi.python.org/pypi/quickgui

Puede crear cualquier número de entradas, (proporción, checkbox, caja de entrada), organizarlas automáticamente en una sola interfaz gráfica de usuario.