miércoles, 28 de marzo de 2012

Guardar cambios en los handles en una aplicación generada con GUIDE (Matlab)

  • Problema: Generamos un programa con GUIDE en Matlab y al modificar los handles dentro de una función o callback, los cambios no se mantienen tras salir de ella.
  • Descripción: Recordemos primero qué son los handles: Sabemos que los handles es una estructura de datos definida por GUIDE. Ésta contiene toda la información de la interfaz gráfica de usuario o GUI. Los handles están asociados a una ventana (figure) concreta (si nuestra GUI tiene diferentes ventanas -figures-, cada una tendrá sus propios handles). De este modo, nos permiten almacenar información accesible desde todos los callbacks de una misma figura y compartir información entre figuras cuando los pasamos como parámetros. Veremos que en todos los callbacks siempre se pasan como parámetro, PERO, si los modificamos o les añadimos nuevos datos dentro de dicha función, estos cambios se perderán al salir del callback.
  • Solución: Para que la información quede almacenada deberemos ejecutar el siguiente comando en los callbacks asociados a los diferentes elementos de GUIDE (por ejemplo justo antes de salir de la función):
guidata(hObject, handles)


Por otro lado, si deseamos modificar los handles en una función que hemos creado nosotros (no un callback de los creados automáticamente por Matlab), entonces es tan fácil como pasar los handles como parámetro y devolverlos como el output de la función. Definiremos la función así:


function handles = nombre_de_la_funcion(handles)
%Aquí el código que modifica nuestros handles, por ejemplo:
handles.nuevo_dato=1;


La llamada a la función lógicamente deberá recoger el output actualiado: 


handles = nombre_de_la_funcion(handles);


Si encontraste una solución a tu problema y ahorraste tiempo, ya me doy por satisfecho. También podrías invitarme a un café con una pequeña donación en Paypal. ¡Gracias! 

No hay comentarios:

Publicar un comentario