2010-12-19 11 views
24

¿Hay una clase de cuadro de mensaje donde puedo mostrar un cuadro de mensaje simple sin una biblioteca de GUI enorme o cualquier biblioteca al éxito o el fracaso del programa. (Mi script solo hace 1 cosa).Recuadro de mensaje de Python Sin gran dependencia de biblioteca

Además, solo necesito que se ejecute en Windows.

+0

Hay dos cuestiones distintas aquí. Deberías dividirlos en preguntas separadas. – katrielalex

+0

Sí hecho. La otra pregunta es en http://stackoverflow.com/questions/4485710/inno-setup-registry – Pwnna

Respuesta

48

Usted puede usar la biblioteca ctypes, que viene instalado con Python:

import ctypes 
MessageBox = ctypes.windll.user32.MessageBoxW 
MessageBox(None, 'Hello', 'Window title', 0) 

Por encima de código Python 3.x es para Para Python 2.x, use MessageBoxA en lugar de MessageBoxW ya que Python 2 usa cadenas no unicode de forma predeterminada.

+0

Yay for ctypes. Eso es lo que iba a sugerir, pero me ganaste :-) –

+7

También puedes usar 'MessageBoxW' en Python2:' MessageBoxW (0, u'Hello ', u'Window title', 0) '. –

+0

¡Eso funcionó perfectamente! Gracias. – Pwnna

9

También hay un par de prototipos en las bibliotecas predeterminadas sin usar ctypes.

cuadro de mensaje simple:

import win32ui 
win32ui.MessageBox("Message", "Title") 

Otras opciones

if win32ui.MessageBox("Message", "Title", win32con.MB_YESNOCANCEL) == win32con.IDYES: 
    win32ui.MessageBox("You pressed 'Yes'") 

También hay un ser más o menos equivalente en win32gui y otro en win32api. Los documentos para todos parecen estar en C:\Python{nn}\Lib\site-packages\PyWin32.chm

+2

' win32ui' no es una biblioteca por defecto. Es parte de 'PythonWin' que se distribuye con' pywin32'. Los paquetes instalados en 'site-packages' no son predeterminados. –

1

Una manera rápida y sucia es llamar al sistema operativo y usar el comando "zenity" (el módulo de subproceso debe incluirse por defecto en cualquier distribución python, zenity también está presente en todos los principales Linux). Prueba este breve script de ejemplo, funciona en mi Ubuntu 14.04.

import subprocess as SP 
# call an OS subprocess $ zenity --entry --text "some text" 
# (this will ask OS to open a window with the dialog) 
res=SP.Popen(['zenity','--entry','--text', 
'please write some text'], stdout=SP.PIPE) 
# get the user input string back 
usertext=str(res.communicate()[0][:-1]) 
# adjust user input string 
text=usertext[2:-1] 
print("I got this text from the user: %s"%text) 

Véase el --help zenity para los diálogos más complejos

0

También puede utilizar la clase de mensaje de tkinter: from tkinter import messagebox menos tkinter es que gran interfaz gráfica de usuario que desea evitar. El uso es simple, es decir: messagebox.FunctionName(title, message [, options]) con FuntionName en (showinfo, showwarning, showerror, askquestion, askokcancel, askyesno, askretrycancel).

0

El módulo PyMsgBox usa tkinter de Python, por lo que no depende de ningún otro módulo de terceros. Puede instalarlo con pip install pymsgbox.

Los nombres de las funciones son similares a alert(), confirm(), y prompt() funciones de JavaScript:

>>> import pymsgbox 
>>> pymsgbox.alert('This is an alert!') 
>>> user_response = pymsgbox('What is your favorite color?') 
Cuestiones relacionadas