tiempo real matrices graficos graficas graficar ejes coordenadas codigos python cross-platform dialog zenity

real - ¿Cuál es la forma más simple de plataformas cruzadas para abrir cuadros de diálogo gráficos en Python?



matplotlib ejes (10)

Quiero la forma más simple posible de abrir cuadros de diálogo simples en scripts de Python. Idealmente, la solución sería:

  • Trabaja en Windows, OS X, Gnome, KDE
  • Parece un diálogo nativo en cualquier sistema operativo
  • Requiere un código mínimo

Para abrir un cuadro de diálogo estándar simple, debe requerir solo un código mínimo. Básicamente, solo está diciendo "despliegue un diálogo estándar con este texto", o "despliegue un diálogo con la pregunta xy alimente la respuesta a la variable y".

Esto es para scripts simples que de otra manera se ejecutarían en la línea de comando. No quiero saber acerca de los marcos de GUI o tengo que configurar un código que diga "iniciar un hilo de la GUI, registrar un controlador de eventos, configurar algunas propiedades de la ventana, ejecutar un ciclo", etc. No quiero tener que configurar sube una ventana o cierra la ventana después. Le doy el texto para poner en la ventana y / o botones y / o casillas de verificación, devuelve lo que el usuario hizo clic en. Todo lo demás debe ser atendido automáticamente. Por ejemplo:

message_box(''File conversion complete'')

para un cuadro de diálogo estándar con un botón "Aceptar", o

balloon_tip(''File conversion complete'')

para un globo emergente de la bandeja del sistema, o

format = button_box(''Which file format do you want?'', ''JPG'', ''PNG'')

y presionan uno de los dos botones, y luego el format es igual a ''JPG'' , o

response = text_query(''What would you like to name the file?'')

y después de que ''bananas.txt'' en el cuadro y presionen Ok, la response ahora es igual a ''bananas.txt'' . No se requiere otro código No hay líneas de comando desagradables para el usuario pobre.

He enumerado Zenity y EasyGUI como ejemplos de respuestas, ya que son similares a lo que quiero, pero no perfecto.

[ Previamente preguntado en el foro de Python ]



El módulo PyMsgBox hace casi exactamente esto. Utiliza el módulo tkinter incorporado para sus 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.

Los cuadros de mensaje nativos de apariencia se encontrarán disponibles en una versión futura.

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/


Esto no es posible. Si quieres algo simple, entonces debes usar Tkinter porque eso es lo que está incluido. Si Tkinter no es lo suficientemente bueno, deberá elegir y empacar una GUI para cada plataforma por separado.

Sugiero que use Tkinter y ajuste las partes que necesita en una clase que será incluso más simple de usar.


Otra posibilidad es el módulo tkMessageBox , que aparentemente está integrado en la biblioteca estándar y es multiplataforma, aunque esto es aún más feo que el resto:

import tkMessageBox tkMessageBox.showinfo(''Title'',''Stuff'')


Para extender la respuesta de tkMessageBox del endolito con la fea ventana vacía en el fondo ...

El código siguiente muestra la casilla sin la ventana de fondo.

import Tkinter, tkMessageBox root = Tkinter.Tk() root.withdraw() tkMessageBox.showinfo("my dialog title", "my dialog message")

Esto se elimina directamente de un comentario útil que encontré en la parte inferior de este artículo . Gracias a Jason (el comentarista) y effbot.org.


la chicharrita es otra alternativa, aunque puede no ser la más simple. Dicho esto, es multiplataforma y solo depende de Python, por lo que no hay dependencias externas. ese solo hecho puede ser razón suficiente para usarlo sobre otros.

y todo lo que puede manejar multimedia con bastante facilidad también, bastante útil si desea mostrar una imagen o video o algo así.

el siguiente ejemplo es de la documentación ...

#!/usr/bin/python import pyglet window = pyglet.window.Window() label = pyglet.text.Label(''Hello, world'', font_name=''Times New Roman'', font_size=36, x=window.width/2, y=window.height/2, anchor_x=''center'', anchor_y=''center'') @window.event def on_draw(): window.clear() label.draw() pyglet.app.run()


wxPython es la mejor biblioteca de GUI de Python (IMO) y utiliza widgets nativos.

import wx app = wx.PySimpleApp() dialog = wx.MessageDialog(None, ''wxPython is awesome!'', ''Dialog Box'', wx.OK|wx.ICON_INFORMATION) dialog.ShowModal() dialog.Destroy() app.MainLoop()


EasyGUI es un archivo único y proporciona una forma sencilla de trabajar con los cuadros de diálogo de Tkinter, pero todavía son feos diálogos de Tkinter no nativos.

from easygui import msgbox msgbox(''Stuff'')

Se puede instalar fácilmente usando:

$ sudo pip3 install --upgrade easygui

Hay un repositorio de GitHub y la documentation es muy clara.

Anteriormente, también había un fork llamado EasyGuiTtk , que desafortunadamente ya no está disponible.


Zenity funciona bajo Linux y Windows , y se puede llamar desde Python directamente:

import os os.system(''zenity --info --text="Stuff"'')

Sin embargo, los valores de retorno de los recuadros de preguntas deben capturarse para actuar, lo cual es más complejo, y debe aprender a comunicarse con subprocesos, etc.

También se puede usar con el front-end PyZenity , que hace que la captura de valores de retorno sea simple:

from PyZenity import InfoMessage InfoMessage(''Stuff'')

He probado PyZenity en Ubuntu y Windows XP, y funciona en ambos.

Leí que Zenity solo es GTK +, pero lo probé en Gnome y KDE, y parece nativo en ambos. Sin embargo, el puerto de Windows no parece nativo porque usa el tema GTK equivocado.

También hay otros programas como KDialog y Xdialog que podrían interactuar con un frontend de Python similar que podría verificar y ver qué ejecutables están disponibles para que se ocupe automáticamente de todo. (También hay una interfaz de Ruby para KDialog ).

No sé si PyZenity funciona bajo OS X, tampoco.


TkInter generalmente se suministra con Python

# File: hello1.py from Tkinter import * root = Tk() w = Label(root, text="Hello, world!") w.pack() root.mainloop()

Si quieres algo más nativo, tendrás que instalar algo como wxpython