miércoles, 22 de diciembre de 2010

wxPython: herencia, parámetros y otras hierbas con wxFormBuilder, en español

Hola. Continuando con la serie de posts sobre wxPython y wxFormBuilder vamos a ver ahora cómo pasar información entre widgets, así como la utilización de la herencia entre objetos y otras cosas. El ejemplo completo (muy comentado) está en el repositorio de El viaje del navegante:


El fichero es Gestión de almacén.zip.

Lo que vamos a construir es una pequeña aplicación que va a simular un gestor de almacén específico, con familias, modelos y submodelos de productos. Además se incluye un sistema de reports (informes) en HTML. La aplicación es muy sencilla, lo que da mucho juego a la hora de completarla. Es más, incluso para guardar los datos en disco se utiliza la persistencia de datos, para ser lo más aséptico posible, y que el propio lector pueda comprender y asimilar lo verdaderamente importante, el uso de los widgets en wxPython y el paso de información entre los mismos. Para ello, hay que tener muy claro el concepto de herencia, ya que para utilizar wxPython es indispensable.

Esta aplicación es para aprender, ya que le faltan muchas cosas, pero lo básico lo tiene. Faltaría por ejemplo estadísticas, control de stock, relación de lotes con sus correspondientes albaranes de entrada, y un sin fin más. La búsqueda de información se podría hacer implementando reports para tal uso, parametrizando la llamada de los mismos. Se deja al lector esta tarea. Aquí únicamente se muestra el camino.

IMPORTANTE: Decir que el ejemplo está muy comentado, por lo que es muy conveniente descargarse el código, para leer los comentarios y poder saber el porqué hago lo que hago.

¿Qué compone el proyecto? De las siguientes partes:

MODELO DE DATOS

clases_gestion_almacen.py: Código generado con pyLorca, una aplicación (escrita por mí) para crear a partir de ficheros Yaml, módulos de clases bases, con propiedades, métodos y atributos.


gestion_almacen_modelo.py: Este módulo contiene las clases que contendrán la información que se guardará en disco y algunas funciones más que nos serán de ayuda. Este modelo importa clases_gestion_almacen.py.

VISTA

gestion_almacen_vista.py: Código generado automáticamente por wxFormBuilder (a través del fichero de proyecto gestion_almacen.fbp), en donde se diseña por completo todo el frontend gráfico de la aplicación. 

APLICACIÓN

gestion_almacen.py: Este módulo importa clases de los demás módulos y es la aplicación principal. Junta el modelo de datos con la vista.

¿Cómo funciona?

Se ejecuta con: python gestion_almacen.py.


Lo primero es crear familias, modelos y submodelos. Nos vamos al menú Clasificación y a insertar datos...


Podemos incluir tantos elementos como queramos. El único requisito es que no pueden repetirse, ya que el sistema no lo permite (un requisito para no tener problemas de duplicidades...).  

Importante: Siempre dar al botón Guardar.

Podemos ver los datos incluidos en el wx.Choice...


Mediante la referencia entre widgets, dichos elementos pasan al frame principal...


También hay que crear los almacenes... Si queremos crear un producto hay que dar valores a todos los campos, y a continuación darle al botón Guardar...


Podemos ver lo que hemos hecho en los informes...


Este tipo de informe es una página html...


¿Dónde se guardan los datos? He utilizado persistencia de datos con cPickle. Se nos generarán los siguientes ficheros...



CONCLUSIONES

En este post se ha presentado un ejemplo para ver cómo se pasan parámetros (información) entre widgets (wx.Choice, etc.). Se ha utilizado pyLorca para la generación de las clases bases, así como wxFormBuilder para la generación íntegra del entorno gráfico. Si no disponemos de un sistema de reports siempre podemos utilizar páginas web para lanzar informes. Se deja al lector la parametrización de los mismos para implementar un sistema de búsqueda. Por último decir que se ha utilizado el módulo cPickle para la persistencia de datos.

Saludos.

2 comentarios:

  1. Muchas gracias, me lo miraré con calma y te comento.
    Saludos

    ResponderEliminar
  2. La comunicación entre frames se hace a traves de la escritura de ficheros en disco?? Es decir, para que el frame principal se entere carga los datos del bd_x.obj. Y el frame secundario modifica dicho fichero, no??

    Es que me parecio entenderlo asi, pero creia que se podia comunicar entre frames datos directamente

    saludos!!
    Y gracias de nuevo por el ejemplo

    ResponderEliminar