Propósito de guidata(hObject, handles) en Matlab

Cada objeto (o figure, o axes, o button, o textbox, etc.) es representado por una variable handles. O sea hObject.

Si estás construyendo una GUI, seguro quieres almacenar datos acerca del estado del programa dentro de la GUI en algún lado. Piensa en una GUI con dos botones (uno con una +, otro con un ) y un texto que inicia en 1. Si el usuario hace click en +, el texto debería incrementar, si el usuario hace click en debería decrementar.

En algún lugar de la GUI, una variable contador necesita almacenarse. Una forma de hacerlo es almacenarla (la variable) en el guidata de la GUI, que es una ubicación especial específica para GUIs. Creo que aquí hay dos razones de por qué es especial:

  1. Cada hObject (un pushbutton, un axes, etc.) que es hijo de la misma figura apunta al mismo guidata. Así que es un lugar común para todas las partes de la GUI compartir datos.
  2. Cualquier función callback en la GUI automáticamente obtiene el guidata como su tercer argumento. O sea, siempre que hagas click en el botón de una GUI con alguna configuración para guidata, el parámetro de entrada (por default) es siempre una copia de guidata(GUIhandle), hecha al momento exacto de hacer click al botón.

De tal manera que una función callback lucirá de la siguiente forma:

function pushButtonCallback(buttonHandle, eventData, handles)
...
disp(handles)

Ahora, handles es sólo una estructura, vamos a decir que nosotros hemos almacenado el contador que estamos utilizando en handles.counter, pero también queremos este valor disponible para cada uno de los otros callbacks. Para hacer eso, necesitamos actualizar el campo handles.counter y entonces, poner los handles de regreso en el guidata de la GUI. Tan pronto como hemos hecho eso, la próxima vez que un usuario le de click a un botón usará la versión actualizada de handles.

function plusPushButtonCallback(buttonHandle, eventData, handles)
% En ESTE punto, 'handles' es sólo una copia del guidata de la GUI

handles.counter = handles.counter + 1;
% En ESTE punto, 'handles' es diferente al guidata de la GUI

guidata(buttonHandle, handles);
% En ESTE punto, 'handles' ha regresado como el nuevo guidata de la GUI

Este post es la traducción de una respuesta a la pregunta ¿Cuál es el próposito o rol de guidata(hObject, handles)? en el foro oficial de Mathworks: aquí.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s