Вы находитесь на странице: 1из 14

3.

GUI: COMPORTAMIENTO Y ELABORACION

3.1 Introducción

Después de abrir un nuevo GUI, pero antes de añadirle componentes, se deben


definir algunos aspectos relacionados con su comportamiento, como sus
dimensiones, acceso y generación de los archivos FIG-File y M-File. Lo anterior, se
puede hacer valiéndose del cuadro de diálogo “GUI Options” que se encuentra en el
menú “Tools” de la barra de herramientas.

Selección de opciones de comportamiento del GUI

Para la fijación de opciones del comportamiento de un GUI

1. Abra la ventana figura del GUI, seleccionando la opción en blanco que se


encuentra por defecto.
2. Despliegue el menú “Tools” de la barra de herramientas del editor del GUI, y
seleccione “GUI Options”. Se despliega el cuadro que muestra la Figura 3.1

Figura 3.1. Cuadro de diálogo GUI Options

El cuadro de diálogo GUI Options permite seleccionar si se quiere que el


GUIDE genere solamente el archivo FIG-File o tanto el archivo FIG-File
como el M-File. Permite, también, la selección de un conjunto de diferentes
comportamientos en el GUI denominados “Resize behavior”, “Command-
Line Accesibility”, “Generate FIG-File and M-File”, “Generate Callback
Function Prototypes”, “GUI allows Only One Instance to Run (Singleton)”,
“Using the System Background Colors” y “Generate FIG-File Only”.
Comportamiento para el Re-Dimensionamiento (Resize Behavior)

Mediante la definición de este comportamiento se controla si el usuario puede re-


dimensionar la ventana figura del GUI y el cómo maneja MATLAB el re-
dimensionamiento. GUIDE facilita tres opciones:

 Non-resizable: Los usuarios no pueden cambiar el tamaño de la ventana


 Proporcional: MATLAB automáticamente cambia el tamaño de los
componentes en el GUI, proporcionalmente al tamaño de la nueva ventana
figura
 Other (Use ResizeFcn): Programa al GUI para que se comporte en una
forma determinada cuando el usuario re-dimensiona la figura

Las dos primeras opciones, simplemente, ajustan las propiedades de la figura


apropiadamente y no requieren alguna otra acción. A continuación se describe cada
una de las opciones y el usuario debe verificar en el Inspector de Propiedades los
cambios que se operan con cada una de ellas

Opción No-Redimensionable (Non-resizable)

Esta opción hace que la ventana del GUI no sea re-dimensionable. Por ejemplo, los
cuadros de diálogo para pregunta, interjección, mensajes de error no son re-
dimensionables, porque una vez que el usuario interactúa con ellos no la necesita lo
que justifica el que no sea re-dimensionable.

Al seleccionar esta opción, GUIDE ajusta las siguientes propiedades para hacer que
el GUI no sea re-dimensionable.

 Units: esta propiedad se ajusta al valor “characters” para la figura del


GUI, el control “Axes” y todos los otros uicontroles. Con esta propiedad
el GUI se despliega con el tamaño correcto en diferentes computadores
 Resize: esta propiedad se ajusta a “off”
 ResizeFcn: esta propiedad se deja en blanco

Opción Proporcional (Proportional)

Esta opción permite a los usuarios re-dimensionar el GUI de tal manera que además
escala los componentes en cuanto a tamaño y posición en relación con el nuevo
tamaño de la figura. Se debe tener en cuenta que no se cambia el tamaño de letra de
las leyendas de los componentes y, aún mas, si el tamaño del componente se reduce
considerablemente, estas leyendas no se alcanzan a leer. Este comportamiento
trabaja bien con herramientas simples de un GUI y en cajas de diálogos que hacen
ajustes sin cerrarlos.

Al seleccionar esta opción, GUIDE ajusta las siguientes propiedades que hacen que
el GUI se re-dimensione proporcionalmente:

 Units: esta propiedad se ajusta al valor “normalized” para el control


“Axes” y todos los otros uicontroles. Con lo anterior, estos componentes
se re-dimensionan y re-localizan con el re-dimensionamiento de la figura
 Units: esta propiedad se ajusta al valor “characters” para la figura del
GUI, de tal manera que esta se despliega con el tamaño correcto en el
momento de ejecutarse, en base a algunos cambios en el tamaño de letra
 Resize: esta propiedad se ajusta a “on”
 ResizeFcn: esta propiedad se deja en blanco

Opción especificada por el usuario (Other (Use ResizeFcn))

Se pueden crear GUI’s que acomoden su tamaño y que al mismo tiempo mantengan
su apariencia y utilidad de su diseño original mediante la programación de una
rutina callback para la figura denominada “ResizeFcn”. Esta rutina permite el re-
cálculo del tamaño y la posición de cada componente en base al nuevo tamaño de la
figura. Se utiliza mas generalmente en aplicaciones que requieren interacción con el
usuario cuando esté trabajando con el GUI. Tal aplicación podría contener axes para
desplegar datos y varios componentes cuyas posiciones y tamaños son críticos para
el uso exitoso de la interface. Al seleccionar esta opción, GUIDE ajusta las
siguientes propiedades que hacen que el GUI se re-dimensione de acuerdo a la rutina
ResizeFcn:

 Units: esta propiedad se ajusta al valor “characters” para la figura del


GUI, el control “Axes” y todos los otros uicontroles. Con esta propiedad
el GUI se despliega con el tamaño correcto en el momento de su ejecución
 Resize: esta propiedad se ajusta a “on”
 ResizeFcn: esta propiedad, para la figura requiere de una rutina callback
para manejar el re-dimensionamiento

Acceso desde la línea de comandos (Command-Line Acceessibility)

Se puede restringir el acceso al manejo de la figura del GUI desde la línea de


comando con la opción “Command-Line Accessibility”. Esto previene a los usuarios
del cambio no advertido en la apariencia del GUI mediante la entrada de comandos,
tales como “plot” que alteran la figura normal. La opción por defecto es “Callback
(GUI becomes Current Figure within Callbacks)” y con ella, el GUI puede,
solamente, convertirse en la figura normal de MATLAB mediante el comando “gcf”
mientras se ejecuta un callback.

Pueden darse ocasiones en que se quiere un manejo de la figura del GUI que sea
accesible desde la línea de comandos. Por ejemplo, se podría requerir que el GUI
despliegue gráficos creados en la línea de comandos. Para este caso, se debería
seleccionar la opción “On(GUI may become Current Figure from Command Line)”.
Hay cuatro opciones para el acceso desde la línea de comandos que son:

 Callback (GUI becomes Current Figure within Callbacks)


 Off (GUI never becomes Current Figure)
 On (GUI may become Current Figure from Command Line)
 Other (Use settings from Property Inspector)

Propiedades de la figura que controlan acceso

Se tienen dos propiedades en la figura que controlan el acceso a ella desde la línea
de comandos que son

 HandleVisibility: Esta propiedad determina si el manejo de la figura es


visible a comandos que intenten accesar la figura normal
 IntegerHandle: Esta propiedad determina si un manejo de la figura es un
número entero o de punto flotante

HandleVisibility-Callback. Al ajustar la propiedad “HandleVisibility” a “Callback”


se causa que las estructuras (handles) sean visibles desde el interior de las rutinas
callback o funciones invocadas mediante las rutinas callbacks, pero no desde dentro
de funciones invocadas desde la línea de comandos. Esto constituye una forma de
proteger a los GUI’s desde la línea de comando de los usuarios mientras se permite
que las rutinas callbacks tengan completo acceso a la estructura de los objetos. Se
debe utilizar esta opción si el GUI contiene Axes.

HandleVisibility-Off. Al ajustar la propiedad “HandleVisibility” a “Off” se


remueve la estructura de la figura de la lista raíz de objetos hijos de tal manera que
no se convertirá en la figura normal (que es el objeto para salidas gráficas). La
estructura se mantiene como válida, sin embargo, hasta que un comando que
especifique que la estructura, explícitamente, todavía trabaja (por ejemplo
“close(1)”. Sin embargo, no se pueden utilizar comandos que operen solamente
sobre la figura normal o axes. Estos comandos incluyen a “xlabel”, “ylabel”,
“zlabel”, “title”, “gca”, “gcf” y “findobj”

HandleVisibility-On. Las estructuras son siempre visibles cuando


“HandleVisibility” se ajusta a “On”

IntegerHandle. Al ajustar la propiedad “IntegerHandle” a “Off” se causa que


Matlab asigne estructuras con números reales no reutilizables (por ejemplo,
67.0001221) en vez de enteros. Esto reduce considerablemente la posibilidad de un
algo accidentL en el desempeño de una operación en la figura

El uso del “findobj”. Al ajustar el comportamiento “Command-Line Accessibility”


al valor “Off” la estructura de la figura del GUI se mantiene escondida. Esto
significa que no se puede utilizar “findobj” para localizar las estructuras de los
uicontroles en el GUI. Como alternativa, el archivo GUI M-File crea una estructura
“handle” que contiene las estructuras de cada control en el GUI y pasa esta
estructura a subfunciones

La siguiente tabla muestra un resumen de cómo cada una de las cuatros opciones del
comportamiento “Command-Line Accessibility” ajustan las propiedades
“HandleVisibility” e “IntegerHandle” en el Inspector de Propiedades.

Opción HandleVisibility IntegerHandle


Callback Callback Off
Off Off Off
On On On
Other User specifies User specifies

Generación de archivos FIG-File y M-File

Se selecciona “Generate FIG-File y M-File” en el cuadro de diálogo “GUI Options”


si se quiere que el GUIDE cree tanto el archivo FIG-File como el archivo M-File
(opción por defecto). Después de seleccionada esta opción, se puede escoger
cualquiera de los siguientes opciones incluidas dentro del marco para configurar el
archivo M-File:

 Generate callback function prototypes


 GUI allows only one instance to run (singleton)
 Use system color scheme for background (recommended)
Opción “Generate callback function prototypes”

Al seleccionar la opción “Generate callback function prototypes” en el cuadro de


diálogo “GUI Options”, GUIDE añade una subfunción al GUI M-File para cualquier
componente que se añada en el GUI (se observa que los controles marco, axes y
static text no utilizan su propiedad callback y, por lo tanto, no tienen subfunción). Se
debe, entonces, escribir el código para el callback en esta subfunción. GUIDE
también añade una subfunción cuando se edita una rutina callback desde el editor de
GUI desplegando un menú contextual haciendo clic derecho sobre el mouse (Figura
3.2) y cuando se añaden menús al GUI utilizando el editor de menús.

Figura 3.2 Despliegue de subfunciones desde el GUI

Asignación de nombres a las Subfunciones callback

Cuando se añade un componente en el GUI, GUIDE asigna un valor a su propiedad


“Tag” que se utiliza para generar el nombre del callback. Por ejemplo, el primer
“push button” que se añade es nombrado como “pushbutton1”. Cuando se genera el
archivo M-File, GUIDE añade una subfunción callback denominada
“pushbutton1_Callback”. Si se define un “Button-DownFcn” para el mismo botón,
GUIDE llama a su subfunción como “pushbutton1_ButtonDownFcn”.

Sintaxis de una función Callback

La sintaxis de la función Callback requiere de tres argumentos y se escribe en la


siguiente forma
function objectTag_Callback(hObject, eventdata, handles)

El argumento hObject es la estructura del objeto cuyo callback se está ejecutando. El


argumento eventdata se establece como vacio y es reservado para un uso futuro. El
argumento handles es una estructura que contiene las estructuras de todos los
componentes en el GUI cuyos nombres de campos son definidos mediante la
propiedad “Tag” del objeto. Puede también, utilizarse para pasar datos a otras
funciones callback o la línea de comandos. Por ejemplo, si se instala un botón push
button cuya propiedad “Tag” se ajusta a “pushbutton1”, entonces GUIDE genera la
siguiente subfunción en el archivo GUI M-File encabezada con el siguiente nombre:

function pushbutton1_Callback(hObject, eventdata, handles)

Asignación de la propiedad “String” de una función Callback

Cuando se añade un componente al GUI, su propiedad “Callback” es ajustada al


valor “% automatic”. Este valor señala al GUIDE que reemplace el nombre de la
función callback en el archivo GUI M-File cuando guarde o ejecute el GUI. Por
ejemplo, GUIDE ajusta la propiedad “Callback” para el uicontrol “pushbutton1” a

my_gui(´pushbutton1_Callback´, gcbo, [], guidata(gcbo))

donde,

 my_gui, el nombre del archive GUI M-File


 pushbutton1_Callback es el nombre de la subfunción rutina callback
definida en my_gui
 gcbo es un comando que regresa la estructura del objeto callback (por
ejemplo, pushbutton1)
 [] es un lugar reservado para el argumento eventdata, normalmente sin
usar
 guidata(gcbo) regresa la estructura handles

Opción “GUI allows only one instance to run (singleton)”

Esta opción permite que se seleccione uno de dos comportamientos en la figura del
GUI en cuanto al despliegue de sus ventanas y que son:
 Permite a Matlab que despliegue solamente una ventana del GUI
 Permite a Matlab que despliegue varias ventanas del GUI

Si se permite solamente una ventana, Matlab reutiliza la figura del GUI existente
cuando se aplica el comando para ejecutar el GUI. Si ya existe un GUI, Matlab lo
hace desplegar en el frente en vez de crear una nueva figura. Si se deja en claro esta
opción, Matlab crea una nueva figura GUI cada vez que se aplica el comando para
ejecutarla

Opción “Use system color scheme for background (recommended)”

El color utilizado para los componentes del GUI varía en sistemas de computadores
diferentes. Esta opción habilita para hacer que el color del fondo de la figura del
GUI sea el mismo que el color por defecto del fondo del uicontrol, que depende del
sistema.

Si se selecciona la opción “Use system color scheme for background


(recommended)”, GUIDE cambia el color de fondo de la figura del GUI para
resaltar el color de los componentes del GUI. La Figura 3.3 ilustra los resultados con
y sin diferenciación en el color del sistema:

Generación de archivos M-File solamente

Se selecciona “Generate FIG-File only” en el cuadro de diálogo “GUI Options” si


no se quiere que GUIDE genere el archivo M-File. Cuando se guarda el GUI desde
el edito, GUIDE crea un archivo FIG-File que se puede redesplegar utilizando el
comando “open”

Figura 3.3 Opción “Use system color scheme for background”


Cuando se selecciona esta opción, se debe ajustar la propiedad “callback” de cada
componente en el GUI a un valor de caracteres que Matlab puede evaluar y
desarrollar la acción deseada. Este valor puede ser una expresión o el nombre de un
archivo M-File. Seleccione esta opción si se quiere utilizar un estilo de
programación completamente diferente que la suministrada por el archivo GUI M-
File.

3.2 GUI: RESPUESTA PASO DE UN SISTEMA DE PRIMER ORDEN

La interfaz gráfica que se observa en la Figura 3.4 se construye para simular la


respuesta paso de un sistema lineal SISO de primer orden especificando los
parámetros dinámicos y de la simulación y mostrando los resultados gráficamente.

Figura 3.4 GUI – Sistema Lineal de Primer Orden

3.2.1 Configuración del GUI

Se instalan cinco botones “Edit Text” con los cuales se capturen los parámetros
dinámicos del sistema, es decir, la constante de tiempo y la ganancia, y los
parámetros específicos de la simulación como el cambio paso en la variable de
entrada, la condición inicial de la variable de salida y el tiempo. Además, se instala
un botón “Axes” donde desplegar en forma gráfica la respuesta para los valores de
los parámetros asignados, un botón “Push Button” con el cual se ejecute la solución
de la ecuación diferencial y seis botones “Static Text” para titular la interfaz y cada
uno de los parámetros que se capturen en los botones “Edit Text”.

Componentes “Static Text”

1. Instalación: Instale seis botones “Static Text” distribuidos como se observan en


la Figura 3.4, y despliegue el inspector de propiedades para la correspondiente
asignación.
2. Propiedad “String”: Asígneles los nombres observados en la figura.
3. Propiedad “BackgroundColor”: Asígneles el color gris
4. Propiedad “ForegroundColor”: Es el color de las letras observado en cada uno
de ellos. El superior es rojo y los otros color negro
5. Propiedad “FontSize”: Es el tamaño de las letras observado en cada uno de
ellos. El superior es tamaño 13 y los otros tamaño 10
6. Propiedad “HorizontalAlignment”: Es la alineación horizontal del título en
cada uno de ellos. El botón superior se ajusta al valor “center” (centrado),
mientras que los localizados a la izquierda se ajustan al valor “left” (a la
izquierda).
7. Propiedad “FontWeight”: Es el estilo de letras del título en cada uno de ellos.
despliegan lineas de texto. La propiedad “FontWeight”, del botón superior, se
ajusta al valor “bold” para mostrar el título en negrita.
8. Propiedad “Position”: Es la asignación de la posición (abscisa y ordenada) del
botón en el GUI y las dimensiones (ancho y alto). Utilícela para ajustar los
botones colocados a la izquierda con el mismo ancho y alto.
9. Alineación: Seleccione todos los botones “Static Text” instalados para alinearlos
sobre una misma línea a la izquierda. A continuación presione el icono “Align
Objects” incluido en la barra de herramientas y seleccione en el marco
“Horizontal” la opción deseada como se observa en la Figura 3.5. Presione el
botón “OK”

Componentes “Edit Text”

1. Instalación: Instale cinco botones “Edit Text” distribuidos como se observan en


la Figura 3.4, y despliegue el inspector de propiedades para la correspondiente
asignación.
2. Propiedad “String”: Asígneles el valor cero a cada uno de ellos como se
observa en la Figura 3.4
3. Propiedad “HorizontalAlignment”: Ajústela al valor “right” (derecha) para
cada uno de ellos.
4. Propiedad “Tag”: Asigne los siguientes nombres “tau_edit1” al de la constante
de tiempo, “K_edit2” al de la ganancia, “X_edit3” al de la entrada, “Yo_edit4” al
de la salida y “t_sim_edit5” al de simulación. Observe las propiedades
“Callback” y “CreateFcn” en el inspector de propiedades donde se nota la
asignación del nombre a cada una de las funciones correspondientes para cada
uno de los botones “Edit Text”
5. Archivo M-File: Despliegue el archivo M-File presionando el icono
correspondiente localizado en la barra de herramientas y verifique que han sido
incluidas dos funciones para cada uno de los botones con los nombres por
ejemplo de tau_edit1_CreateFcn y tau_edit1_Callback

Figura 3.5. Alineación horizontal

6. Propiedad “Position”: Haga un ajuste manual de su localización y tamaño


como se observa en la Figura 3.4. Utilice el inspector de propiedades de cada uno
de los botones “Edit Text” para asignarle la misma altura de los botones “Static
Text”.

Componente “Axes”

1. Instale un botón “Axes” con la localización y el tamaño ajustados manualmente


como se observa en la Figura 3.4. Este componente se deja ajustado a las
propiedades asignadas por defecto

Componente “Push Button”

1. Instalación: Instale un botón “Push Button” como se observa en la Figura 3.4, y


despliegue el inspector de propiedades para la correspondiente asignación.
2. Propiedad “String”: Introduzca la palabra Plot como se observa en la figura
3. Propiedad “HorizontalAlignment”: Ajústela al valor “center” (centro).
4. Propiedad “Tag”: Asigne el nombre “plot_pushbutton1”. Observe en el
inspector de propiedades “Callback” el nombre a la función correspondiente
5. Archivo M-File: Despliegue el archivo M-File presionando el icono
correspondiente localizado en la barra de herramientas y verifique que ha sido
incluida la función plot_pushbutton1_Callback

3.2.1 Programación del GUI

Después de elaborada la distribución de los botones en la interfaz se continúa con la


programación de las acciones que se requiere que cada uno de ellos realice. En la
interfaz construida, los botones “Static Text” no necesitan de código porque su
función es, solamente, el despliegue del título especificado dentro de su propiedad
“String”. Según sea la acción que realiza cada uno de los otros botones, en las
funciones correspondientes se debe digitar la codificación correspondiente.

Componentes “Edit Text”

Los botones “Edit Text” son los componentes mediante los cuales el usuario
introduce un dato y esta debe ser capturada mediante la programación codificada en
el archivo M-File de Matlab debe capturar dicha información. A continuación se
describe la correspondiente al botón tau_edit1_CreateFcn y tau_edit1_Callback. Se
deja como ejercicio la adición del código correspondiente a los otros cuatro
componentes “Edit Text”.

Function tau_edit1_CreateFcn

Se puede observar en el archivo M-File, que Matlab en la función “CreateFcn” de un


componente “Edit Text” introduce el siguiente código al instalar el botón

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

Con la palabra clave “ispc” y el ciclo de control “if…else…end” se verifica si el


Matlab se encuentra instalado en un computador personal (PC) con sistema
operativo Windows. Si es verdadero se cumple la sentencia ordenada en el segundo
renglón, pero si no se cumple, entonces, se ejecuta la sentencia del cuarto renglón
del ciclo.

Con el comando “set” se ajustan las propiedades del botón o componente


programado en la función en la cual está incluido el ciclo de control. En el ciclo
anterior, el segundo renglón ajusta el color de fondo del botón ('BackgroundColor')
al blanco ('white'). Es decir, que la sintaxis del comando “set” es:

set(Objeto, 'Propiedad', 'Valor de la Propiedad')

1. Dentro de la función tau_edit1_CreateFcn, cambie el valor white, por otro


valor como yellow, black, blue, cyan, green, etc. Haga correr la simulación
del GUI y verifique que el fondo del botón muestra el fondo con el color
especificado en el código

La sentencia construida en el cuarto renglón del ciclo anterior, ajusta la propiedad


del color del fondo del botón “Edit Text” al valor por defecto de dicha propiedad.
Para esto se emplea la palabra clave “get” que se aplica para adquirir la información
sobre las propiedades o características de un objeto. En este caso, el cero que se
observa como primer argumento significa el objeto por defecto y a continuación, el
segundo argumento captura la correspondiente propiedad)

Function tau_edit1_Callback

En esta función se codifica la captura del valor introducido por el usuario en la


propiedad “String” del botón denominado tau_edit1_Callback. Para ello se
introduce las siguientes sentencias

tau = str2double(get(hObject, 'String'));


if isnan(tau)
set(hObject, 'String', 0);
errordlg('Input must be a number','Error');
end

En la primera sentencia, el comando “str2double” convierte la propiedad “String”


introducida como “character” a un valor numérico de doble precisión. En este caso
dicha propiedad es previamente capturada con la palabra clave “get”. El valor
convertido se almacena con el nombre de “tau”.

Con el ciclo de control “if…else…end” y la palabra clave “isnan” se verifica si el


valor “tau” no es número o si. Si se verifica que no es número, el segundo renglón
ajusta la propiedad “String” al valor cero y despliega un cuadro de diálogo con un
mensaje de error con la leyenda y el título especificados como argumentos del
comando “errordlg”

2. Dentro del callback de cada uno de los restantes botones “Edit Text”
introduzca un código similar al anterior para la captura y verificación del
valor introducido en cada uno de ellos. Tenga en cuenta que debe asignar un
símbolo al valor capturado; se sugiere que sea el mismo colocado en la
propiedad Tag.
3. Ejecute el GUI y asigne cualquier valor que sea no numérico en cualquiera de
los botones “Edit Text”. Se verifica que se despliega el cuadro de diálogo con
el mensaje de error. En caso contrario, la asignación es correcta y no se
despliega el cuadro de diálogo.

Вам также может понравиться