PDA

Ver la versión completa : Phyton Consejos para app python con gui en raspbian



crossmax
07/06/2016, 09:07
Buenas geperos!

Estoy empezando a desarrollar un app para raspberry con python y no se que usar para hacer el interfaz gráfico.
He pensado en hacerlo con plantillas html y Javascript para rellenar los campos variables pero no estoy muy seguro de que sea la mejor opción.
La verdad es que soy bastante nuevo en python, pero probé por encima tkinter y me pareció un poco feo.
Me gustaría tener una capa gráfica lo más independiente posible para poder usar la que mejor se adapte según el sistema operativo, aunque de momento solo me planteo hacerla para Linux.

Espero me podéis dar algún consejo, que siempre alucino con el nivelazo en programación de la gente del foro

Muchas gracias!!

PharaOnyx
07/06/2016, 09:17
¿Has probado wxWidgets? (wxPython)

Un saludo, Alex

^MiSaTo^
07/06/2016, 09:37
Hay varias opciones. Pon en Google gui Python y veras una lista larga (estoy desde el móvil y no te puedo pegar el enlace).

Yo he oído cosas buena de unas librerías que se llaman kivy o algo así. Personalmente no he hecho nada de escritorio con Python así que no te sé decir

DarkDijkstra
07/06/2016, 10:33
Kivy lo estuve usando yo un tiempo para algunas maquetas de videojuegos, y aunque tenía algunas cosas que me encantaban en cuanto a su diseño, a veces me costaba un poco conseguir lo que quería.
Para ciertos tipos de layouts y tal si me parecía cómodo, pero por ejemplo para mover sprites y tal ya no tanto.

Si quieres hacer una app que muestre información, tenga algún tipo de botones, selecciones y tal, podría valerte, internamente usa una especie de lenguaje propio de marcado (digamos que algo análogo a html, pero usando yaml)

Si te sientes "cómodo" haciendolo web, tal vez podrías plantearte django, yo nunca me cansaré de recomendarlo, además trae un sistema de administración (para poder ver y modificar valores desde una base de datos) muy cómodo y que generalmente puedes adaptar sin tener que hacerte tu tus propias plantillas web.

También podría valerte python-camelot, que está inspirado en django, pero para aplicaciones de escritorio, usando Qt. Te permite abstraer toda la parte de base de datos (asumiendo que la tengas) usando SQLAlchemy y toda la gui usando Qt de una manera muy sencillita

^MiSaTo^
07/06/2016, 10:36
Kivy lo estuve usando yo un tiempo para algunas maquetas de videojuegos, y aunque tenía algunas cosas que me encantaban en cuanto a su diseño, a veces me costaba un poco conseguir lo que quería.
Para ciertos tipos de layouts y tal si me parecía cómodo, pero por ejemplo para mover sprites y tal ya no tanto.

Si quieres hacer una app que muestre información, tenga algún tipo de botones, selecciones y tal, podría valerte, internamente usa una especie de lenguaje propio de marcado (digamos que algo análogo a html, pero usando yaml)

Si te sientes "cómodo" haciendolo web, tal vez podrías plantearte django, yo nunca me cansaré de recomendarlo, además trae un sistema de administración (para poder ver y modificar valores desde una base de datos) muy cómodo y que generalmente puedes adaptar sin tener que hacerte tu tus propias plantillas web.

También podría valerte python-camelot, que está inspirado en django, pero para aplicaciones de escritorio, usando Qt. Te permite abstraer toda la parte de base de datos (asumiendo que la tengas) usando SQLAlchemy y toda la gui usando Qt de una manera muy sencillita

Hombre para sprites y demás quieres usar pygame mejor. Y yo en vez de django recomendaría Flask porque es más pequeño y ligero que Django pero igual de cómodo :) Aunque para algo de escritorio me parece una opción un poco overkill.


Aquí hay una lista de opciones para hacer GUI en python bien explicadas: https://wiki.python.org/moin/GuiProgramming

DarkDijkstra
07/06/2016, 11:03
Hombre para sprites y demás quieres usar pygame mejor. Y yo en vez de django recomendaría Flask porque es más pequeño y ligero que Django pero igual de cómodo :) Aunque para algo de escritorio me parece una opción un poco overkill.

Aquí hay una lista de opciones para hacer GUI en python bien explicadas: https://wiki.python.org/moin/GuiProgramming

Si, la verdad es que pygame es el acercamiento a esos casos, intenté kivy en una especie de port de un juego de mesa, porque me pareció muy curiosa la manera que tiene orientarte en la programación.
Flask no lo conocía, voy a echarle un ojo

Y respecto a usarlo para la app, si, tienes razón en que igual es "demasiado", pero oye, yo lo uso en pequeñas tonterías corriendo sobre una virtualización en la nube con 128 megas de ram y me es muy útil...

Unas preguntas clave, crossmax, tal vez sean ¿que tipo de app exactamente estás haciendo? ¿usas una base de datos o algo así para almacenar la información? ¿necesitas datos en tiempo real? Más que nada por si te sería más útil un framework (aunque sea muy sencillito) o sólo necesitas un par de bibliotecas para hacer una GUI normalita.

crossmax
07/06/2016, 11:18
Gracias a todos por vuestros comentarios. He empezado a instalarme Kivy para probarlo, pero con tantas opciones estoy aturullado, jejeje.

He estado mirando Django, y también creo que me sobra potencia por todos lados, aunque ya que me pongo a aprender algo seria una opción empezar con algo potente que no tenga limitaciones en un futuro.
La aplicación seria una especie de terminal de venta, con peculiaridades, pero al fin y al cabo una aplicación con sqlite y sincronizacion de datos con un servidor. Es un plus que el interfaz grafico pueda correrse en local y en remoto (seria entonces buena idea hacerlo web) pero tampoco es algo con lo que quiera cerrarme puertas. Quiero que el interfaz sea lo mas rápido y ágil posible, que el intercambio de datos entre la capa de logica y grafica sea segura (y rapida tambien) por que al fin y al cabo lo que mas valoran los usuarios es la fluidez de la aplicación, mas que corra en un navegador , en tkinter o en lo que sea. Si con estos datos me cerráis un poco las opciones me hacéis feliz, que si tengo que probar un poco de todo no empiezo con la aplicación ni el año que viene xD

Miles de gracias!

^MiSaTo^
07/06/2016, 11:27
Gracias a todos por vuestros comentarios. He empezado a instalarme Kivy para probarlo, pero con tantas opciones estoy aturullado, jejeje.

He estado mirando Django, y también creo que me sobra potencia por todos lados, aunque ya que me pongo a aprender algo seria una opción empezar con algo potente que no tenga limitaciones en un futuro.
La aplicación seria una especie de terminal de venta, con peculiaridades, pero al fin y al cabo una aplicación con sqlite y sincronizacion de datos con un servidor. Es un plus que el interfaz grafico pueda correrse en local y en remoto (seria entonces buena idea hacerlo web) pero tampoco es algo con lo que quiera cerrarme puertas. Quiero que el interfaz sea lo mas rápido y ágil posible, que el intercambio de datos entre la capa de logica y grafica sea segura (y rapida tambien) por que al fin y al cabo lo que mas valoran los usuarios es la fluidez de la aplicación, mas que corra en un navegador , en tkinter o en lo que sea. Si con estos datos me cerráis un poco las opciones me hacéis feliz, que si tengo que probar un poco de todo no empiezo con la aplicación ni el año que viene xD

Miles de gracias!
Si lo quieres correr en local y remoto entonces tira por algo como django. Nosotros tenemos un par de aplis así internas en el curro que hice yo con Flasky estamos muy contentos con ello :) De verdad que te lo recomiendo ampliamente

crossmax
07/06/2016, 12:39
Pensaba que habia enviado el mensaje y lo he perdido, cachis!

Te decía que me haces la puñeta Misato :mad: (con cariño) porque he estado probando Kivy, con los ejemplos que hay y me ha gustado mucho, tanto la estética como la usabilidad que proporciona.
Entiendo que con un css currado puedes conseguir el mismo resultado con Flask, pero css y yo no nos llevamos demasiado bien.
¿Sabes si carga un poco el sistema tener Flask que lleva incorporado un servidor web, en comparación con Kivy? En un hardware como una Raspi puede traducirse en unas décimas de retardo (Flask vs Kivy)? Lo digo porque prefiero resignarme al acceso remoto si eso acaba reflejando mayor fluidez.
La duda que tenia para el intercambio de datos entre python y Flask ya he visto que es sencillo. Me gusta.

^MiSaTo^
07/06/2016, 15:42
Pensaba que habia enviado el mensaje y lo he perdido, cachis!

Te decía que me haces la puñeta Misato :mad: (con cariño) porque he estado probando Kivy, con los ejemplos que hay y me ha gustado mucho, tanto la estética como la usabilidad que proporciona.
Entiendo que con un css currado puedes conseguir el mismo resultado con Flask, pero css y yo no nos llevamos demasiado bien.
¿Sabes si carga un poco el sistema tener Flask que lleva incorporado un servidor web, en comparación con Kivy? En un hardware como una Raspi puede traducirse en unas décimas de retardo (Flask vs Kivy)? Lo digo porque prefiero resignarme al acceso remoto si eso acaba reflejando mayor fluidez.
La duda que tenia para el intercambio de datos entre python y Flask ya he visto que es sencillo. Me gusta.

Hombre si te gusta kivy pues adelante con ello :) No he probado personalmente kivy, sólo he hecho aplicaciones web con python primero con django y luego con flask así que no puedo comparar. Entiendo que flask sobrecargará más que kivy porque flask es un framework completo (pequeño y ligero eso sí, no tan monstruoso como django) y kivy son sólo unas librerías gráficas si lo he entendido bien.
Ya tienes qué ver tú qué quiere hacer y qué te compensa más

aitorpc
07/06/2016, 17:35
Yo he estado unos días probando Flask y es un framework bastante agradable, y es tambien rápido, pero ya si en una RPi si se nota diferencia entre este y kivy ni idea.

crossmax
28/06/2016, 14:11
Buenas de nuevo,

He retomado el tema del Kivy y ando perdido (como siempre). Ya sabéis que soy nuevo con Kivy, medio nuevo con python y no suelo programar frontend asique tengo un cacao hermoso.
A ver si podéis decidme un poco por donde ir tirando. Os cuento un caso concreto que no sé cómo hacer.
Tengo una aplicación python que funciona sin gui y atiende al teclado. Cuando se lanza carga unos datos, comprueba base de datos, instancia unos objetos,...
El caso es que estoy empezando con la pantalla de carga y quiero lanzarla y que muestre una descripción de lo que se está cargando en cada momento.
Tengo varias pegas, pero todas tiene4n que ver con cómo gestionar el backend (python) con en frontend (kivy).
En relación a esto me surge:
- Si lanzo la ventana, hasta que no vuelvo de ella no continúa la aplicación (backend)
- Si tengo instanciados objetos en la aplicación, como puedo consultarlos para ir mostrando la info que quiero.

Creo que intentar crear las ventanas con ficheros .kv me está complicando la vida. ¿Para esto que necesito es mejor crear las ventanas directamente en código python? Porque lo que necesito es que la aplicación funcione con o sin ventanas, quiero las capas totalmente independientes.

Espero podáis guiarme un poco, ya sé que preguntas tan metafisicas son un poco complejas de contestar :rolleyes:

Muchas gracias

swapd0
28/06/2016, 14:25
- Si lanzo la ventana, hasta que no vuelvo de ella no continúa la aplicación (backend)

Eso es porque es una ventana modal que espera a que el usuario la cierre para seguir con el código, puedes abrir una ventana normal y el código de la aplicación continuara sin esperar a que se cierre la ventana.

PD: no se como va el Kivy pero en todos los GUI puedes mostrar una ventana de forma modal o no.

^MiSaTo^
28/06/2016, 15:04
Lo que te pasa con la ventana es un problema de concurrencia. No se cómo gestiona eso Kivy ya que no he hecho nada con ello pero lo ideal es que tengas la ventana en un thread y en otro el resto para que uno no bloquee al otro.