una - ¿Cómo puedo crear un cuadro de mensaje simple en Python?
tkinter python (12)
¡El código que presentaste está bien! Solo necesita crear explícitamente la "otra ventana en el fondo" y ocultarla, con este código:
import Tkinter
window = Tkinter.Tk()
window.wm_withdraw()
Justo antes de su messagebox.
Estoy buscando el mismo efecto que alert()
en JavaScript.
Esta tarde escribí un sencillo intérprete basado en la web usando Twisted.web. Básicamente, envía un bloque de código Python a través de un formulario, y el cliente viene y lo toma y lo ejecuta. Quiero poder hacer un simple mensaje emergente, 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 ícono tk. No quiero esto Estaba buscando un código wxPython simple, pero siempre requería configurar una clase e ingresar un bucle de aplicación, etc. ¿No hay una forma simple y sin catch de crear un cuadro de mensaje en Python?
¿Has mirado a easygui ?
import easygui
easygui.msgbox("This is a message!", title="simple gui")
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 llamadas a función bloquean hasta que el usuario haga clic en un botón Aceptar / Cancelar. Es un módulo de Python puro multiplataforma sin dependencias.
Instalar con: pip install PyMsgBox
Uso de 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/
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 es importante para usted: usa diálogos nativos y no depende de Tkinter como el ya mencionado easygui
, pero puede que no tenga tantas características.
En Windows, puede usar ctypes con la biblioteca 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")
No es el mejor, aquí está mi cuadro de mensaje básico que usa 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
"""
Puede usar un código de importación y 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 define 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
También puede colocar la otra ventana antes de retirarla para colocar 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!")
Utilizar
from tkinter.messagebox import *
Message([master], title="[title]", message="[message]")
La ventana maestra debe crearse antes. Esto es para Python 3. Esto no es fot wxPython, sino para tkinter.
echa un vistazo a mi módulo python: pip install quickgui (Requiere wxPython, pero no requiere conocimiento de wxPython) https://pypi.python.org/pypi/quickgui
Puede crear cualquier cantidad de entradas, (ratio, checkbox, inputbox), organizarlas automáticamente en una sola interfaz gráfica de usuario.
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)
dará this .
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