A medida que crecen las aplicaciones creadas con Guide o App Designer en Matlab puede ser necesario usar más de una venta. Siendo en estos casos puede ser necesario modificar los elementos de una ventana desde otra. En este tutorial se va a explicar como modificar los elementos de una ventana desde otra con Guide en Matlab.
Creación de dos ventanas
A modo de ejemplo vamos a crear dos ventanas con GUIDE. En la primera solamente situaremos y un botón con el que llamar a los controles. Esta es la ventana, a la que nombraremos como `guide_1
, es la que se muestra a continuación.
Para facilitar el trabajo usaremos los nombres por defecto de los elementos. Por lo que tendremos unos ejes con nombre axes1
y un botón llamado pushbutton1
. La enviar un gráfico diferente a los ejes desde una segunda venta. Ahora crearemos una segunda ventana en la que se situarán dos botones.
A la que llamaremos guide_2
y también usaremos los valores por defecto de los elementos.
Envío de información de la primera ventana a la segunda
Una vez creadas las ventanas necesitamos desde la primer llamar a la segunda y enviar el identificador de los ejes. Esto se hace desde el callback del botón de la primera figura. En el que se escribirá el código:
function pushbutton1_Callback(hObject, eventdata, handles) guide_2(handles.axes1);
Lo que hace este es llamar a la segunda ventana y pasarle los handles del eje. En caso de que tengamos más objetos sobre los que deseemos actuar desde la segunda venta también deberíamos ponerlos en la llamada. Este es realmente el punto importante, para poder dibujar desde la segunda ventana esta ha de poder los elementos de la primera sobre los que trabajar.
Recepción de los datos en la segunda venta
En la segunda venta es necesario recoger los datos para enviados y guardarlos para su uso. Los datos se encuentran en la variable varargin
de la función guide_2_OpeningFcn
, la función que se llama cuando se abre una aplicación de GUIDE. varargin
es una celda con longitud igual a los parámetros pasados en la llamada a la ventana. En este caso los handles de los ejes. Así solamente es necesario guardarlos en la variable handles
de la ventana para tenerlos disponibles más adelante.
function guide_2_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; handles.axes = varargin{1}; guidata(hObject, handles);
Es importante hacer esto antes de la línea guidata(hObject, handles);
, ya que es cuando se guardan los datos.
Funciones en la segunda ventana
Ahora se puede agregar funciones en los callbacks de la segunda ventana que pueden dibujar en la primera. Ejemplos básicos puede ser dibujar una función seno o coseno.
function pushbutton1_Callback(hObject, eventdata, handles) x = 0:0.01:10; plot(handles.axes, x, sin(x)); function pushbutton2_Callback(hObject, eventdata, handles) x = 0:0.01:10; plot(handles.axes, x, cos(x));
Dibujar en la primera ventana desde la segunda.
En este punto si se lanza guide_1
y desde este el segundo.
Es posible dibujar en la primera ventana pulsando sobre cualquiera de los botones.
Conclusiones
En esta entrada se ha visto una técnica para modificar los elementos de una ventana desde otra con Guide en Matlab. Algo que puede ser útil cuando las aplicaciones creadas con esta herramienta crecen. Aunque hoy en día puede ser más interesante migrar las aplicaciones a App Desginer, ya que este soporta ventanas más complejas.
Imagen de William Iven en Pixabay
Publicidad
Publicidad