GUI basada en navegador para una aplicación de Python [cerrado]

8

Quiero crear una GUI basada en web / navegador para una aplicación python de línea de comandos. El objetivo es hacer uso de las tecnologías HTML / JS para crear esta GUI. Como la aplicación en sí, debe ejecutarse en Linux y Windows, y la interfaz será accesible solo desde localhost (no expuesto a internet). La GUI contendrá de 5 a 10 páginas.

No quiero una GUI de escritorio tradicional que incluya HTML / JS, sino solo un montón de archivos html y algún tipo de controlador entre esos y la aplicación.

También quiero hacer uso de la programación asincrónica (como ajax) para poder cargar e imprimir datos en la GUI sin actualizar toda la página. Probablemente usaría jQuery para eso y un par de cosas más.

¿Cómo recomendarías diseñar esto? El rendimiento no es la clave aquí, más bien estoy buscando confiabilidad, portabilidad y simplicidad.

Estoy pensando en usar un servidor / marco ligero de Python HTTP (como CherryPy ) y quizás más tarde un sistema de plantillas Python (al principio solo serán un par de páginas).

EDITAR:
Estoy buscando ideas / recomendaciones sobre cómo construir esto, no alternativas a la GUI basada en navegador / web.

ack__
fuente
2
Si solo va a ejecutarse localmente, simplifique todo y escriba la GUI en python.
GrandmasterB
3
No se deje intimidar por la idea de hacer una interfaz gráfica de escritorio. Encuentro que la interfaz de escritorio es mucho más fácil de producir que las interfaces basadas en HTML.
GrandmasterB
44
Aunque estoy de acuerdo en que tienen grandes ventajas, esto no es lo que quiero lograr. Y como usted dice, que los encuentra más fácil de producir, pero no es mi caso. Por fin, estoy usando libs javascript que proporcionan cosas que no encuentras en los marcos de la GUI de Python.
ack__
2
Compartir su investigación ayuda a todos. Cuéntanos qué has probado y por qué no satisfizo tus necesidades. Esto demuestra que te has tomado el tiempo para tratar de ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. También vea Cómo preguntar
mosquito el
2
Una vez más, no se trata de sentirse intimidado, he desarrollado muchas GUI de escritorio en el pasado, usando Gtk, nCurses, WinForms, .Net e incluso hice una GUI en ensamblador x86 usando radasm . Es solo que no se ajusta a mis necesidades aquí.
ack__

Respuestas:

5

Actualmente estoy tratando de hacer casi lo mismo. Parece que Python tiene un servidor ( SimpleHTTPServer ), así que intento hacer una aplicación web AngularJS que interactúe con el servidor Python.

Potencialmente hay un proyecto cefpython que permitiría distribuir aplicaciones Python como programas independientes.

Eugene
fuente
Vi comentarios negativos sobre SimpleHTTPServer aquí en SO, sugeriría buscar otro servidor (probablemente iré por CherryPy pero hay muchos otros disponibles). ¿Has probado CEFPython? Me temo que no proporciona las funcionalidades de Chromium más actualizadas, pero podría estar equivocado. El uso de un navegador real garantiza un soporte real, mantenimiento y desarrollo activo.
ack__
@ack__ Actualmente estoy jugando con SimpleHTTPServer: no creo que haya ningún problema si todo lo que necesita es un servidor de sesión única. Estoy tratando de hacerlo solo con el personal de la biblioteca predeterminada para facilitar la instalación en los sistemas de los usuarios. Todavía no he llegado al punto en que necesito cefpython, pero debería ser posible actualizar CEF allí si es necesario.
Eugene
Ok, ¿y qué versión de CEF usaste? No me preocupa la parte de multiprocesos, sino las diferencias entre la API de Webkit y la API de contenido de Chromium, si las hay.
ack__
Puede obtener binarios de su sitio. Tienen una aplicación CEFClient que puede usar para inicializar su aplicación. También he visto un par de productos basados ​​en CEF, aunque usan node.js: github.com/adobe/brackets-shell y github.com/rogerwang/node-webkit . brackets-shell ejecuta el nodo en un proceso separado mientras node-webkit (la última vez que lo verifiqué) estaba haciendo ese proceso. Me pregunto qué tan difícil sería reemplazar el nodo con la aplicación Python.
Eugene
3

Sus criterios establecidos son:

  • Fiabilidad
  • Portabilidad
  • Simplicidad

Si ese es el caso, una aplicación de escritorio es el camino a seguir. No es necesario lanzar un servidor web a la mezcla. Eso solo complicará las cosas sin ganancia real.

Según la edición del OP, que se desea una interfaz basada en HTML, una posible ruta podría ser node-webkit . Esto le permitirá crear una aplicación de escritorio que se ejecute en Windows, Linux y Mac usando HTML y Javascript. Tiene un enfoque algo similar a PhoneGap (con la excepción de que se utiliza el mismo navegador integrado en todas las plataformas). El nodo se utiliza para activar el Javascript, que proporciona acceso a una gran cantidad de bibliotecas. Y tiene acceso al sistema subyacente, lo que le permite ejecutar el programa de línea de comandos basado en Python.

Gran maestro B
fuente
2
Yo diría que serían fáciles, no más fáciles. No será más confiable porque no está tan familiarizado con Pytk. Nunca dijo nada sobre la línea de comando. No hay nada menos portátil sobre un servidor local. Nuevamente, si está haciendo sus propios controles, por ejemplo, será mucho más difícil de desarrollar con una interfaz gráfica de usuario de aplicación.
BeardedO
Obtiene muchos beneficios al hacer nuestra interfaz de usuario en HTML; es por eso que Steam, Spotify y otros admiten Chromium Embedded Framework. Adobe Brackets es un ejemplo interesante: tienen node.js ejecutándose como un proceso separado junto con el proceso CEF UI.
Eugene
Sí, el principal beneficio es la flexibilidad. Tiene mucha menos resistencia, por ejemplo, al desarrollo de nuevos controles, diseños reactivos, diseños de página dinámicos.
BeardedO
3
Solo para aclarar: al hacer la interfaz de usuario en HTML, obtienes una interfaz de usuario moderna multiplataforma con soporte altamente optimizado para la representación de fuentes, transiciones aceleradas por GPU, etc. Hay una gran cantidad de bibliotecas y marcos bien mantenidos, herramientas y demás. Por ejemplo, un problema irritante que enfrento al hacer UI en Java es el soporte de Retina Macs. No existe tal problema cuando se ejecuta en navegadores.
Eugene
1
GrandmasterB No digo que no pueda hacer lo que hace el navegador. Usted puede. Pero los navegadores ya lo tienen implementado y muy optimizado (la competencia es feroz allí).
Eugene
2

Opciones para aplicaciones web de Python:

  • django
  • web.py
  • werkzeug (con / sin matraz)
  • retorcido
  • cherry.py
  • wsgi crudo
  • raw simplehttpserver

Cualquiera de estos funcionará. En cuanto a cómo construir una aplicación; La mayoría de estos marcos tienen tutoriales en línea. Simplemente sígalo y adáptelo a sus necesidades.

tylerl
fuente