Páginas

viernes, 21 de junio de 2013

Programación con PyQT4: Paso y modificación de valores entre formularios

Programación con PyQT4: Paso y modificación de valores entre formularios

Una forma que se me ha ocurrido (puede haber más y mejores), para pasar datos de un formulario es aprovechar que los objetos se pasan por referencia y no por valor, para usarlo para pasar datos.


Esquema:

En el esquema anterior, podemos ver dos formularios (A y B). El A le envía información al B, para que sea editada. El B se encargará reenviar la información una vez modificada por el usuario.


Para hacer esto posible, mediante el uso de "paso por  referencia", hacemos lo siguiente:

1º Creamos una clase "Dato", que contiene varias propiedades con distintas variables.
class dato():
    base="" #contendrá un texto
    lista=[] #contendrá una lista

En el formulario A y B, crearemos una variable que sea de este tipo, 

#en el Formulario A
valorFA=dato() #creamos una instancia de la clase  dato()

#en el Formulario B
valorFB=dato() #creamos una instancia de la clase  dato()

En el formulario A,  igualamos a la variable del formularioB, la variable A (la estamos pasando por referencia)
#en el Formulario A
FormularioB.valorFB=valorFA 

Llamamos al formulario de modo modal:
FormularioB.exec_()

Ahora se abre el formulario B, donde modificaremos los datos recibidos y cuando pulsemos el botón, de cerrar el formulario, antes,  asignaremos los valores tomados a la variable valorFB
#en el formulario B
valorFB.base= ....
valorFB.lista = .... 
self.close() #se cierra el formulario

Cuando cerremos el el formulario, como la variable valorFA se ha pasado por referencia, esta contiene las  modificaciones que se hayan realizado en el formulario B, obteniendola modificada por ese formulario.

Ejemplo:

Consiste en dos formularios donde:
-> Formulario (A): tiene dos etiquetas, cuyo contenido vamos a modificar al abrir el otro formulario (B).
-> El otro formulario (de edición), contiene dos QtextEdit, que inicialmente toman los valores de las etiquetas del formulario inicial,y podemos modificar. Si pulsamos con el botón aceptar, se cierra y se modificaran los valores en el formulario (A), si le damos a cancelar se cierra pero no se modifican las etiquetas.














Enlace de descarga del ejemplo completo: enlace