lunes, 17 de agosto de 2015

Programación GUI con python

Existen varias librerias que implementan interfaces gráficas de usuario (GUI) en python, las principales son:
  • Tkinter: Basada en las librerías gráficas TCL/TK, interface "de-facto" (#1) preinstalada con python, es la generalmente recomendada para proyectos triviales y/o de aprendizaje.
  • WxPython: Basada en WxWidgets (una libreria multiplataforma C/C++).Sería la interface por defecto si no hubiese existido TK en primer lugar.
  • PyQT: basado en la libreria C++ QT (KDE)
  • PyGTK: basado en la libreria C GTK (GNOME)

Tkinter

  • Ventajas:
    • Preinstalado con python en casi todas las plataformas
    • Relativamente simple y fácil de aprender
    • Documentación completa
  • Desventajas:
    • Pocos elementos gráficos (sin listados, arboles, etc.)
    • Limitado control del comportamiento de la interface (recomendado para proyectos "triviales")
    • Lento (dibuja cada botón, etiqueta, menú, etc.) **
Nota **: cabe aclarar que las ultimas versiones de TCL/TK mejoran varios de estos puntos, dibujando con las funciones nativas de la plataforma, lo que acelera y mejora la apariencia.

WxPython

  • Ventajas:
    • Completo conjunto de elementos gráficos (listados, árboles, grillas, etc.)
    • Flexible control del comportamiento de la interface
    • Rápido y de Apariencia nativa (diseñado para utilizar funciones nativas de cada plataforma)
    • Más de 12 librerías y utilitarios complementarios (ver comparación)
    • Soporta las características comunes de Windows, y las emula en Linux/Mac OS cuando no se pueden hacer nativamente (y viceversa).
    • Permite separar completamente el diseño de la interface en XML del código python (XRC)
    • Es fácil armar componentes personalizados, tanto que incorpora widgets que no están en wxWidgets mismo, ya que están escritos en Python (AGW).
    • Documentación completa y ejemplos extensivos.
  • Desventajas:
    • No viene preinstalado con python, se debe instalar un paquete (wxPython en Windows y Mac OS, wxWidgets+wxPython en Linux, aunque en este último caso está generalmente está fácilmente disponible en los repositorios).
    • Relativamente mas complejo de aprender
    • Al tener un desarrollo bastante rápido y sostenido, se liberan versiones frecuentemente, lo que en la práctica le confiere cierto nivel de "volatilidad" y problemas de compatibilidad si se deben mantener varias versiones de wx para el mismo código.
    • Hacer interfaces multiplataformas que se vean bien requiere conocimiento del toolkit subyacente (win32, gtk).

Ejemplo en WxPython

wxPython permite crear programas robustos, e interfaces de usuario altamente funcionales.

Nuestro primer script sólo mostrará una pequeña ventana.
Vamos a analizar el script línea por línea
Este es nuestro primer ejemplo en wxPython .
.
La primera línea es la ruta a un intérprete de Python . La segunda línea es un comentario. Proporciona un nombre para el script.
Esta línea importa los módulos básicos wxPython . Los controles, gdi , misceláneos , y ventanas. Técnicamente , wx es un espacio de nombres . Todas las funciones y objetos de los módulos básicos se iniciarán con un prefijo wx. La siguiente línea de código crea un objeto de aplicación.
Todos los programas wxPython deben tener un objeto de solicitud.
Aquí creamos un objeto wx.Frame. Un widget wx.Frame es un widget importante de contenedor. Vamos a analizar este widget en detalle más adelante . El widget de wx.Frame es un widget padre para otros widgets.Si especificamos ninguno como parámetro padre esto indica que el widget no tiene padres . Se trata de un widget de la parte superior en la jerarquía de widgets. Después creamos el widget wx.Frame , debemos llamar al método Show ( ) para mostrarlo en la pantalla.
La última línea entra en el Mainloop . El Mainloop es un ciclo sin fin . Atrapa y envía todos los eventos que existen en la vida de la aplicación.
Este fue un ejemplo simple. Sin embargo podemos hacer mucho con esta ventana. Podemos cambiar el tamaño de la ventana , maximizarla , minimizarla . Esta funcionalidad requiere una gran cantidad de codificación. Todo esto se oculta y es proporcionado por el conjunto de herramientas wxPython .





No hay comentarios:

Publicar un comentario