3. GUIDE
• La interfaz gráfica de usuario (GUI - Graphical User
Interface), es la forma en que el usuario interactúa con el
programa o el sistema operativo de una computadora.
• Una GUI contiene diferentes elementos gráficos tales
como: botones, campos de texto, menús, gráficos, etc.
• MatLab nos permite realizar GUIs de una manera muy
sencilla usando GUIDE (Graphical User Interface
Development Enviroment).
• GUIDE es un entorno de programación visual disponible
en MatLab para realizar y ejecutar programas que
necesiten ingreso continuo de datos. Tiene las
características básicas de todos los programas visuales
como Visual Basic o Visual C++.
3
4. CARACTERÍSTICAS GENERALES
DE UNA GUI EN MATLAB
• Una de las tantas herramientas con la que cuenta
MatLab, es la creación de GUIs, que son muy útiles para
presentar un desarrollo final y adhieren usabilidad al
ajuste de parámetros y visualización de un programa
• La forma de implementar las GUI con MatLab es crear los
objetos y definir las acciones que cada uno va a realizar.
Al usar GUIDE obtendremos dos archivos:
Un archivo .FIG: Contiene la descripción de los
componentes que contiene la interfaz.
Un archivo .M: Contiene las funciones y los controles
del GUI así como el callback.
• Un callback se define como la acción que llevará a cabo
un objeto de la GUI cuando el usuario lo active. Por
ejemplo, suponga que en una ventana existe un botón el
cual al presionarlo ejecutará una serie de acciones, a eso
se le conoce como la función del callback.
4
5. INICIANDO GUIDE
Para crear una GUI en MatLab usamos GUIDE, lo
podemos hacer de tres formas:
Ejecutando el comando guide en la ventana de
comandos:
>> guide
Haciendo un clic en el ícono GUIDE que muestra
la figura:
Ejecutando del menú principal: File – New
GUI
5
GUIDE
7. VENTANA DE INICIO DE GUI
OPCIONES:
7
Blank GUI
(Default)
La opción de interfaz gráfica de usuario en blanco (viene
predeterminada), nos presenta un formulario nuevo, en el
cual podemos diseñar nuestro programa.
GUI with
Uicontrols
Esta opción presenta un ejemplo en el cual se calcula la
masa, dada la densidad y el volumen, en alguno de los dos
sistemas de unidades. Podemos ejecutar este ejemplo y
obtener resultados.
GUI with Axes
and Menu
Esta opción es otro ejemplo el cual contiene el menú File
con las opciones Open, Print y Close. En el formulario tiene
un Popup menu, un push button y un objeto Axes, podemos
ejecutar el programa eligiendo alguna de las seis opciones
que se encuentran en el menú despegable y haciendo clic en
el botón de comando.
Modal
Question
Dialog
Con esta opción se muestra en la pantalla un cuadro de
diálogo común, el cual consta de una pequeña imagen, una
etiqueta y dos botones Yes y No, dependiendo del botón que
se presione, el GUI retorna el texto seleccionado (la cadena
de caracteres ‘Yes’ o ‘No’).
8. INTERFAZ GRÁFICA DE USUARIO EN BLANCO
8
ÁREA DE DISEÑO
PALETA DE
COMPONENTES
BARRA DE MENÚS
BARRA DE
HERRAMIENTAS
10. INTERFAZ GRÁFICA DE USUARIO
10
• Para obtener la etiqueta de cada elemento de la paleta de
componentes ejecutamos: File Preferences y seleccionamos
Show names in component palette.
11. INTERFAZ GRÁFICA DE USUARIO
11
• La siguiente tabla muestra una descripción de los
componentes de la paleta de componentes:
12. PROPIEDADES DE LOS COMPONENTES DE UNA
GUI
12
• Cada uno de los elementos de GUI, tiene un conjunto de
opciones que podemos acceder con clic derecho.
13. INSPECTOR DE PROPIEDADES
13
• La opción Property Inspector nos
permite personalizar cada elemento.
• Cuando se le da doble clic a un
control, muestra una ventana listando
todas las propiedades de ese control
(fuente, posición, tamaño, etc.).
• Tag: es el nombre del control en el
código, es mejor renombrarlo por algo
identificable.
• String: es el texto que aparece en el
control.
• ForegroundColor: color del texto.
• BackgroundColor: color del control.
14. VIEW CALLBACKS
14
• Al hacer clic derecho en
el elemento ubicado en
el área de diseño, una de
las opciones más
importantes es View
Callbacks, la cual, al
ejecutarla, abre el
archivo .m asociado al
diseño y nos posiciona en
la parte del programa
que corresponde a la
subrutina que se
ejecutará cuando se
realice una determinada
acción sobre el elemento
que se está editando.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Se pueden borrar los comentarios.
15. CARACTERÍSTICAS GENERALES
DE UNA GUI EN MATLAB
• Una aplicación GUIDE consta de dos archivos: .m y .fig. El
archivo .m es el que contiene el código con las
correspondencias de los botones de control de la interfaz
y el archivo .fig contiene los elementos gráficos.
• Cada vez que se adicione un nuevo elemento en la
interfaz gráfica, se genera automáticamente código en
el archivo .m.
• Para ejecutar una interfaz gráfica, si la hemos etiquetado
con el nombre interfaz.fig, tenemos 3 opciones:
Ejecutando en la ventana de comandos:
>>interfaz.
Haciendo clic derecho en el m-file y seleccionando la
opción RUN.
Presionando la flecha verde en la parte superior del
editor GUI se grabará el trabajo actual y correrá el
programa (La primera vez que se lo corra preguntará
el nombre del programa),
15
16. CARACTERÍSTICAS GENERALES
DE UNA GUI EN MATLAB
16
Entonces, ahora ya tenemos un archivo (interfaz.fig) y otro archivo
(interfaz.m)
17. SENTENCIA HANDLES
• Todos los valores de las propiedades de los elementos
(color, valor, posición, string, etc.) y los valores de las
variables transitorias del programa se almacenan en
una estructura, los cuales son accedidos mediante un
único y mismo identificador para todos éstos. El
identificador se asigna en:
% Choose default command line output for interfaz
handles.output = hObject;
• Cada uno de los objetos de MatLab tiene un
identificador único (handles), a los cuales se les
llamará handles o id.
• handles, es el identificador a los datos de la
aplicación. Esta definición de identificador es salvada
con la siguiente instrucción:
% Update handles structure
guidata(hObject, handles);
• guidata, es la sentencia para salvar los datos de la
aplicación. 17
18. SENTENCIA GUIDATA
• guidata es la función que guarda las variables y
propiedades de los elementos en la estructura de
datos de la aplicación, por lo tanto, como regla
general, en cada subrutina se debe escribir en la
última línea lo siguiente:
guidata(hObject,handles);
• Esta sentencia nos garantiza que cualquier cambio o
asignación de propiedades o variables quede
almacenado.
• Por ejemplo, si dentro de una subrutina o de una
operación dio como resultado una variable resultado
para poder utilizarla desde el programa u otra
subrutina debemos salvarla de la siguiente manera:
handles.resultado=resultado;
guidata(hObject,handles);
• La primera línea crea la variable resultado a la
estructura de datos de la aplicación apuntada por
handles y la segunda graba el valor.18
19. SENTENCIAS GET Y SET
• Cómo recuperamos el valor de una propiedad de un
control?
valor = get (handles.control, ‘propiedad’)
• La asignación u obtención de valores de los componentes se realiza
mediante las sentencias get y set. Por ejemplo si queremos que la
variable salida tenga el valor del slider1 escribimos:
salida= get(handles.slider1,'Value');
• Los datos siempre se obtienen a través de los identificadores
handles.
• Cómo asignamos valor a las propiedades de los controles?
set (handles.control, ‘propiedad’, valor)
handles es una estructura que, por medio de un puntero, asigna el
valor de la propiedad al control.
• Para asignar el valor de la variable salida al statictext etiquetada
como text1escribimos:
set(handles.text1,'String',salida);%Escribe el valor del Slider1
%en static-text
Cuando se modifica el código del m-file no se tiene que volver a
correr la GUI (solo se ha modificado la funcionalidad).
19
20. ESTRUCTURA DE LOS GRÁFICOS DE MATLAB
• Los gráficos de MatLab tienen una estructura
jerárquica formada por objetos de distintos tipos.
• Esta jerarquía tiene forma de árbol.
20
21. ESTRUCTURA DE LOS GRÁFICOS DE MATLAB
• Según se muestra en la figura anterior, el objeto más general
es la pantalla (screen). Este objeto es la raíz de todos los
demás y sólo puede haber un objeto pantalla. Una pantalla
puede contener una o más ventanas (figures). A su vez cada
una de las ventanas puede tener uno o más ejes de
coordenadas (axes) en los que representar otros objetos de
más bajo nivel. Una ventana puede tener también controles
(uicontrol) tales como botones, barras de
desplazamiento, botones de selección o de opción, etc.) y
menús (uimenu). Finalmente, los ejes pueden contener los
cinco tipos de elementos gráficos que permite MATLAB:
líneas (line), polígonos (patches), superficies
(surface), imágenes bitmap (image) y texto (text).
• La jerarquía de objetos mostrada indica que en MatLab hay
objetos padres e hijos. Por ejemplo, todos los objetos
ventana son hijos de pantalla, y cada ventana es padre de
los objetos ejes, controles o menús que están por debajo. A
su vez los elementos gráficos (líneas, polígonos, etc.) son hijos
de un objeto ejes, y no tienen otros objetos que sean sus
hijos.
• Cuando se borra un objeto de MatLab automáticamente se
borran todos los objetos que son sus descendientes. Por
ejemplo, al borrar unos ejes, se borran todas las líneas y
polígonos que son hijos suyos. 21
22. COMANDO UICONTROL
El comando uicontrol permite definir los controles gráficos
de MatLab.
MATLAB permite desarrollar programas con el aspecto
típico de las aplicaciones de Windows. Estudiaremos
cómo crear algunos de los controles más utilizados. Para
todos los controles, se utilizará la función uicontrol, que
permite desarrollar dichos controles. La forma general del
comando uicontrol es la siguiente:
id_control = uicontrol(id_parent,'Propiedad1',valor1,...
'Propiedad2',valor2, (otras
propiedades),'callback','sentencias')
22
23. COMANDO UICONTROL
El comando uicontrol permite definir los
controles gráficos de MATLAB descritos en los
siguientes apartados. Estos controles reciben las
acciones de los usuarios, que se denominan
eventos (por ejemplo, clicar en un botón,
cambiar el valor de una barra de
desplazamiento, ...). A continuación se explican
algunas de las propiedades de uicontrol.
23
24. OPCIONES DEL COMANDO UICONTROL
• El comando uicontrol permite definir los controles
gráficos de MatLab.
24
COLOR DEL
OBJETO
(BACKGROUNDCOLOR)
Controla el color del objeto. Por defecto éste suele
ser gris claro, aunque puede tomar distintos valores:
green, red, white, etc. Éstos irán definidos entre
comillas (por ejemplo 'green')
ACCIÓN A
EFECTUAR POR EL
COMANDO
(CALLBACK)
Este comando especifica la acción a efectuar por
MATLAB al actuar sobre el control. Se trata de una
expresión u orden, almacenada en una cadena de
caracteres, que se ejecutará al activar el control.
Esta instrucción es equivalente a realizar
eval(‘expresión’)
CONTROL
ACTIVADO/DESACTIVADO
(ENABLE)
Este comando permite desactivar un control, de tal
forma que una acción sobre el mismo (por ejemplo,
apretar sobre el mismo con el ratón) no produce
ningún efecto. Los valores que puede tomar esta
variable son on u off
ALINEAMIENTO
HORIZONTAL DEL
TITULO
(HORIZONTALALIGNMENT)
Esta opción determina la posición del título del
control en el mismo. Los valores que puede tomar
son: left, center o right
25. OPCIONES DEL COMANDO UICONTROL
25
VALOR MÁXIMO
(MAX)
Esta opción determina el máximo valor que puede
tomar un valor cuando se utilizan cajas de textos o
botones de opción. En caso de botones tipo on/off,
que solamente admiten las dos posiciones de
abierto y cerrado, esta variable corresponde al valor
del mismo cuando está activado
VALOR MÍNIMO
(MIN)
Análogo a la opción anterior para el valor mínimo
CONTROL DEL
OBJETO PADRE
(PARENT)
Esta opción especifica el id del objeto padre. Debe
ir siempre en primer lugar
POSICIÓN DEL
OBJETO
(POSITION)
En esta opción se determina la posición y el tamaño
del control dentro del objeto padre. Para ello se
define un vector de cuatro elementos, cuyos valores
siguen el siguiente orden: [izquierda, abajo, longitud,
altura]. Aquí izquierda y abajo son la distancia a la
esquina inferior izquierda de la figura y longitud y
altura las dimensiones del control
VISIBLE
(VISIBLE)
Puede tomar dos valores: on/off. Indica si el control
es visible en la ventana o no. Este comando es
similar al Enable, si bien éste además de quedar
inhabilitado el control éste desaparece de la
26. OPCIONES DEL COMANDO UICONTROL
26
NOMBRE DEL
OBJETO
(STRING)
Esta opción define el nombre que aparecerá en el
control. Cuando el control sea una opción de menú
desplegable (popup menu), los nombres se sitúan en
orden dentro del string, separados por un carácter
barra vertical (|)
TIPO DE CONTROL
(STYLE)
Esta opción puede tomar los siguientes valores:
pushbutton, radiobutton, checkbox, slider, edit,
popupmenu y text, según el tipo de control que se
desee (pueden usarse nombres abreviados: así,
pushbutton puede abreviarse en push)
UNIDADES
(UNITS)
Unidades de medida en las que se interpretará el
comando Position. Los valores que puede tomar
Units son: pixels (puntos de pantalla), normalized
(coordenadas de 0 a 1), inches (pulgadas), cent
(centímetros), points (equivalente a 1/72 parte de
una pulgada). La opción por defecto es pixels
VALOR
(VALUE)
Permite utilizar el valor que tiene del control en un
momento dado. Por ejemplo, un botón de chequeo
(check button) puede tener dos tipos de valores,
definidos por las variables Max y Min. Según sea uno
27. COMANDO UICONTROL
MATLAB puede tener varias ventanas abiertas, pero siempre hay
una y sólo una que es la ventana activa. A su vez una ventana
puede tener varios ejes (axes), pero sólo unos son los ejes activos.
MATLAB dibuja en los ejes activos de la ventana activa. Los
identificadores de la ventana activa, de los ejes activos y del objeto
activo se pueden obtener respectivamente con los comandos
gcf (get current figure), gca (get current axes) y gco (get current
object):
gcf devuelve un entero, que es el handle de la ventana activa
gca devuelve el handle de los ejes activos
gco devuelve el handle del objeto activo
Los objetos se pueden borrar con el comando delete:
delete(handle) borra el objeto correspondiente y todos sus hijos
27
28. COMANDO UICONTROL
CHECK BOXES
Los botones de selección permiten al usuario seleccionar
entre dos
opciones. Los botones de selección actúan como
interruptores, indicando un estado on (si el botón está
activado) u off
(si el botón está desactivado). El valor de ambos estados
viene definido por las opciones Max y Min,
respectivamente. Los botones de selección deben ser
independientes unos de otros.
Ejemplo: El siguiente conjunto de instrucciones crea una
caja con una opción, que permite visualizar ejes de una
figura dentro de una función plot:
28
29. COMANDO UICONTROL
% Definir un texto fijo como título para los botones de selección
txt_axes = uicontrol(gcf,...
'Style','text',...
'Units','normalized','Position',[0.4 0.55 0.25 0.1],...
'String','Seleccione la opcion');
% Definir la checkbox para la propiedad Box de los ejes
cb_box = uicontrol(gcf,...
'Style','checkbox',...
'Units','normalized','Position',[0.4 0.475 0.25 0.1],...
'String','Box=on',...
'CallBack',['set(gca,''Box'',''off''),',...
'if get(cb_box,''value'')==1,',...
'set(gca,''Visible'',''on''),',...
'set(gca,''Box'',''on''),',...
'else,',...
'set(gca,''Visible'',''off''),',...
'end']);
29
31. COMANDO UICONTROL
BARRAS DE DESPLAZAMIENTO (SCROLLING BARS
O SLIDERS)
Las barras de desplazamiento permiten al
usuario introducir un valor entre un rango de
valores. El usuario puede cambiar el valor
clicando sobre la barra, clicando en las flechas
laterales o bien arrastrando el elemento central
con el ratón.
Ejemplo: El siguiente ejemplo muestra como se
utilizan las barras de desplazamiento para
mover un sistema de referencia espacial:
31
32. COMANDO UICONTROL
% Obtener un id de la ventana activa y borrar su contenido
fig = gcf; clf
% Los callbacks definen la propiedad View de los ejes
% a partir de os valores de las barras de desplaz. (Value property)
% y escriben sus valores en los controles text
%
% Definir la barra para el ángulo de azimut
sli_azm = uicontrol(fig,'Style','slider','Position',[50 50 120 20],...
'Min',-90,'Max',90,'Value',30,...
'CallBack',[...
'set(azm_cur,''String'','...
'num2str(get(sli_azm,''Val''))),',...
'set(gca,''View'',',...
'[get(sli_azm,''Val''),get(sli_elv,''Val'')])']);
% Definir la barra para el ángulo de elevación
sli_elv = uicontrol(fig,...
'Style','slider',...
'Position',[240 50 120 20],...
'Min',-90,'Max',90,'Value',30,...
'CallBack',[...
'set(elv_cur,''String'',',...
'num2str(get(sli_elv,''Val''))),',...
'set(gca,''View'',',...
'[get(sli_azm,''Val''),get(sli_elv,''Val'')])']);
% Definir los controles de texto para los valores mínimos
32
34. COMANDO UICONTROL
% Definir los controles de texto para los valores
actuales
% Los valores son inicializados aquí y son
modificados por los callbacks
% de las barras cuando el usuario cambia sus
valores
azm_cur = uicontrol(fig,...
'Style','text',...
'Pos',[120 80 50 20],...
'String',num2str(get(sli_azm,'Value')));
elv_cur = uicontrol(fig,...
'Style','text',...
'Pos',[310 80 50 20],...
'String',num2str(get(sli_elv,'Value')));
34
35. COMANDO UICONTROL
35
1. La siguiente instrucción dibujará en la pantalla del gráfico un PUSH BUTTON, que
tiene como nombre Start Plot. Al pulsarlo se ejecutarán las instrucciones
contenidas en el fichero mifunc.m:
pbstart = uicontrol(gcf, 'Style', 'push', 'Position',[10 10 100 25], 'String', 'Start Plot', 'CallBack', 'mifunc');
donde es necesario crear un fichero llamado mifunc.m, que será ejecutado al
pulsar sobre el botón. En lugar de este fichero también puede ponerse una
cadena de caracteres conteniendo distintos comandos, que será evaluada como
si se tratase de un fichero *.m.
% fichero .m
[x,y]=meshgrid(-1:.1:1); n=20;
for j = 1:n
t=(2*pi/19)*(j-1);
z=2*sin(t)*exp(-x.^2-y.^2);
surf(x,y,z),axis([-1 1 -1 1 -2 2])
F(j) = getframe;
end
movie(F,6)
La siguiente instrucción dibujará en la pantalla del gráfico una caja de selección
(POP-UP MENUS) desplegable que permite elegir una opción entre varias mostradas en
una lista. Eligiendo una de las opciones, MatLab realizará la opción elegida. El menú
se despliega pulsando sobre la flecha de la derecha. La opción sobre la que pase el
ratón aparecerá de otro color.
%Definir el menú pop-up
popcol = uicontrol(gcf, 'Style', 'popup', 'String', 'red|blue|green|yellow', 'Position',[400 50 120 20],
36. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
36
• Los controles son objetos que se ubican dentro de GUI y
permiten mostrar, aceptar o validar datos.
• Éstos componentes son los uicontrol de MatLab y es por lo tanto
programable en sus diferentes propiedades.
PUSH BUTTON
El control push button genera una acción cuando el usuario hace
un clic sobre él (por ejemplo, un botón OK puede cerrar una caja
de diálogo).
Programando el Callback: cuando el usuario pulsa el botón
pushbutton, su callback se ejecuta y no devuelve un valor ni
mantiene un estado.
function pushbutton1_Callback(hObject, eventdata, handles)
x=linspace(0,2*pi,200);
y=sin(x);
z=cos(x);
plot(x,y, '--',x,z,'*')
grid on;
axis([0 2*pi -1.5 1.5]); % ejes
xlabel('ejex')
ylabel('ejey')
legend('seno','itcoseno') % it=cursiva;
title('FUNCIONES SENO Y COSENO');
37. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 37
TOGGLE BUTTON
Los toggles buttons generan una acción e indican un estado
binario (por ejemplo, on u off). Cuando se pulsa el botón toggle
button aparece oprimido y permanece así aún cuando se suelta
el botón del mouse, al tiempo que el callback ejecuta las órdenes
programadas dentro de él. Los subsecuentes clic del mouse
retorna el toggle button al estado de nondepressed y es posible
de nuevo ejecutar su callback.
Programando el Callback: la rutina del callback necesita
preguntar a toggle button para determinar en qué estado esta
MatLab y pone el valor igual a Max de la propiedad cuando el
toggle button está oprimido (Max tiene por defecto 1) e igual a
Min cuando el toggle button no está oprimido (Min tiene por
defecto 0).
function togglebutton1_Callback(hObject, eventdata, handles)
boton_estado = get(handles.togglebutton1,'value')
if boton_estado==get(handles.togglebutton1,'Max') %TOGGLE BUTTON se
disp('Él botón se encuentra presionado') %encuentra presionado
elseif boton_estado==get(handles.togglebutton1,'Min') %TOOGLE BUTTON no se
disp('Él botón no se encuentra presionado') %encuentra presionado
end
38. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 38
RADIO BUTTON
Este control se utiliza para seleccionar una opción de un grupo de
opciones (es decir, sólo un botón está en estado
seleccionado), para activar un radiobutton, pulse el botón del
mouse en el objeto. Los radiobutton tienen dos estados:
seleccionado y no seleccionado, al cual se accede a través de
su propiedad value.
value = Max, el botón se selecciona.
value = Min, el botón no se selecciona.
Programando el Callback: los radio buttons son mutuamente
exclusivos dentro de un grupo de opciones, los callback para
cada radiobutton se deben poner en la propiedad value igual a 0
en todos los otros radiobuttons del grupo. MatLab pone la
propiedad de value a 1 en el radio button pulsado por el usuario.
39. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 39
RADIO BUTTON
function radiobutton1_Callback(hObject, eventdata, handles)
set(handles.radiobutton2,'value',0)
opcion1 = get(handles.radiobutton1,'value');
if opcion1==1
x=linspace(-2,3,3000); %Generamos una tabla de valores en el dominio x
y=(x.^2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x); %Definimos la función
plot(x,y,'.');
grid on;
title('Función definida a trozos')
end
function radiobutton2_Callback(hObject, eventdata, handles)
set(handles.radiobutton1,'value',0)
opcion2 = get(handles.radiobutton2,'value');
if opcion2==1
[x,y]=meshgrid(-7.5:0.5:7.5); %Generamos la malla [x,y]
z=sin(sqrt(x.^2+y.^2))./(sqrt(x.^2+y.^2));
surfl(x,y,z) %Dibujamos en 3D
title('Z=sin(sqrt(X^2+Y^2))/(sqrt(X^2+Y^2))');
xlabel('x'); ylabel('y'); zlabel('z');
end
40. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 40
CHECK BOX
Los checkboxes se utilizan para proporcionar al usuario varias
opciones de las que se puede elegir una o más de una cuando se
ha pulsado el botón sobre él, e indica su estado como verificado
o no verificado. La propiedad value indica el estado del
checkbox asumiendo el valor del Max igual a 1 y del Min igual a 0.
Value = Max, la caja se verifica.
Value = Min, la caja no se verifica.
Programando el Callback: se puede determinar el estado actual
de un checkbox desde su callback preguntando el estado de su
propiedad en value.function checkbox1_Callback(hObject, eventdata, handles)
if (get(hObject,'value')==get(h,'Max'))
disp('El checkbox ha sido seleccionado'); %CHECKBOX seleccionado
else
disp('El checkbox no ha sido seleccionado'); %CHECKBOX no seleccionado
end
41. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 41
EDIT TEXT
Los controles Edit Text son campos que les permiten a los usuarios
ingresar o modificar cadenas de texto. Cuando se quiera ingresar
un texto, la propiedad string contiene el texto ingresado por el
usuario.
Programando el Callback: para obtener la cadena de texto
tecleada por el usuario se consigue de la propiedad string en el
callback.
MatLab devuelve el valor de la propiedad string del edit text
como una cadena de caracteres. Si se desea que el usuario
ingrese valores numéricos, se debe convertir los caracteres a
números, usando el comando str2double el cual convierte la
cadena a un tipo double. Si el usuario ingresa caracteres no
numéricos, str2double le devolverá NaN.
function edit1_Callback(hObject, eventdata, handles)
usuario_string = get(handles.edit1,'string') %devuelve la cadena de texto ingresada
%por el usuario en el edit text
function edit2_Callback(hObject, eventdata, handles)
valor_entrada = str2double(get(handles.edit2,'string')) %convierte el string en double
if isnan(valor_entrada) %verifica si la cadena ingresada es no-numérico (isnan)
errordlg('Ingresar un valor numérico','Input') %se visualiza un diálogo de error
end
42. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
42
SLIDER
Los deslizadores o barras de desplazamiento permiten explorar
fácilmente una larga lista de elementos o una gran cantidad de
información, y acepta la entrada numérica dentro de un rango
específico, permitiéndole al usuario mover una barra corrediza. El
desplazamiento de la barra se efectúa presionando el botón del
mouse y arrastrando la barra, o pulsando el botón que posee una
flecha. La ubicación de la barra indica un valor numérico.
Existen cuatro propiedades que controlan el rango y tamaño de
paso del deslizador:
value Contiene el valor actual del deslizador
Max Define el valor máximo del deslizador, el valor por defecto es 1
Min Define el valor mínimo del deslizador, el valor por defecto es 0
SliderStep
Especifica el tamaño de un paso del deslizador con respecto al
rango, el valor por defecto es [0,01 0,10], proporciona un 1% de
cambio para los clics en las flechas y un 10% de cambio para los
clics en la barra
function slider1_Callback(hObject, eventdata, handles)
slider_valor = get(handles.slider1,'value')
43. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 43
STATIC TEXT
Los controles Static Text se utilizan para mostrar texto que el
usuario no puede modificar.
El texto estático se usa frecuentemente para etiquetar otros
mandos y proporciona las direcciones al usuario, o indica valores
asociados con un deslizador (Slider).
Los usuarios no pueden cambiar interactivamente el texto de allí
que en el texto estático no hay ninguna manera de invocar la
rutina de un callback asociada a él.
Static text, no posee función asociada, pero sí una dirección
asociada, que la podemos utilizar para escribir los resultados.
Para saber cuál es esta dirección, haciendo doble-clic en este
componente, la ubicamos en la etiqueta Tag.
44. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 44
LIST BOX
Los List Boxes muestran una lista de ítems entre los cuales el usuario
puede seleccionar uno o más ítems.
La propiedad string contiene la lista de cadenas desplegadas en
el listbox. El primer ítem en la lista tiene el índice 1.
La propiedad value contiene el índice en la lista de cadenas que
corresponde al ítem seleccionado. Si el usuario selecciona
múltiples ítems, entonces el value es un vector de índices.
La propiedad List box Top es un índice en la serie de cadenas
defenidas por la propiedad string y debe tener un valor entre 1 y
el número de cadenas.
function listbox1_Callback(hObject, eventdata, handles)
indice = get(handles.listbox1,'value')
45. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 45
LIST BOX
Simple o Múltiple selección:
Los valores de las propiedades Min y Max determinan si los
usuarios pueden hacer simples o múltiples selecciones:
Si Max-Min>1, entonces las cajas de la lista permiten la
selección del ítem múltiple.
Si Max-Min<1, entonces las cajas de la lista no permiten la
selección del ítem múltiple.
Programando el Callback: MatLab evalúa el callback del listbox
después de que el botón del mouse se suelta o un evento del
keypress se ha efectuado, eso cambia la propiedad de value (es
decir, cuando quiera el usuario pulsa el botón en un ítem, pero no
al pulsar el scrollbar en el list box).
Esto significa que el callback se ejecuta después del primer clic
de un doble-clic en un solo ítem o cuando el usuario está
haciendo las selecciones múltiples, en estas situaciones se deberá
agregar otro componente, como Done button (push button) y
programar su rutina del callback para preguntar el valor de la
46. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 46
LIST BOX
function listbox1_Callback(hObject, eventdata, handles)
valor=get(handles.listbox1,'Value')
if(valor==1)
set(handles.text1,'String','UNO');
elseif(valor==2)
set(handles.text1,'String','DOS');
elseif(valor==3)
set(handles.text1,'String','TRES');
else
set(handles.text1,'String','CUATRO');
end
47. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 47
POPUP MENU
Los Popup menús permiten visualizar una lista de opciones
cuando los usuarios presionan la flecha.
La propiedad string contiene la lista de cadenas visualizadas en el
popup menu.
La propiedad value contiene el índice del ítem seleccionado de
la lista de cadenas, el primer ítem en la lista tiene el índice 1.
Cuando no abre, un popup menu visualiza la opción actual que
es determinado por el índice contenido en la propiedad value.
Los popup menús son útiles cuando se quiere proporcionar varias
opciones mutuamente exclusivas a los usuarios, y no usar una
mayor cantidad de espacio que una serie de radio buttons
requeriría.
Programando el Callback: se puede programar el popup menu
para trabajar verificando sólo el índice del ítem seleccionado
(contenido en la propiedad value) o se puede obtener la actual
48. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 48
POPUP MENU
function popupmenu1_Callback(hObject, eventdata, handles)
opcion = get(handles.popupmenu1,'value')
switch opcion
case 1
disp('Se ha seleccionado la opción 1');
case 2
disp('Se ha seleccionado la opción 2');
otherwise
disp('Se ha seleccionado la opción 3');
end
Activando o desactivando controles:
• Se puede saber si un control responde al botón del mouse
usando la propiedad enable (habilitado). Los controles
tienen tres estados:
on: el control está operativo
off: el control está inactivo
inactivo: el mando es inválido, pero su etiqueta no se
graba fuera. Cuando un mando es inválido, mientras se
pulsa el botón izquierdo del mouse no se ejecuta su
rutina del callback.
49. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 49
AXES
Los ejes (axes) permiten visualizar los gráficos, como todos los
objetos de los gráficos, los ejes tienen las propiedades para
controlar su apariencia.
Programando el Callback: los ejes no son objetos uicontrol, pero
pueden programarse para ejecutar un callback cuando los
usuarios pulsen el botón del mouse en los ejes. Use la propiedad
ButtonDownFcn de los ejes para definir el callback.
Axes es la función de bajo nivel para la creación de gráficos.
MatLab crea automáticamente un eje, si no existe ya, cuando se
emite un comando que crea un gráfico.
Si una GUI tiene múltiples ejes, se debe especificar qué ejes se
desea permanezcan en blanco explícitamente cuando se emite
las órdenes de plot.
axes(handles.axes1)
Se construyen los ejes cuya propiedad Tag son axes1 los ejes
actuales, y por consiguiente el blanco por trazar las órdenes, se
50. CONTROLES DE LA INTERFAZ GRÁFICA DE
USUARIO
SOFTWARE DE SIMULACIÓN - BPDP 50
PANEL
Se puede hacer una GUI fácil de entender visualmente agrupando varios
controles relacionados. Un panel puede contener los paneles y grupos de
botones, así como ejes y los controles de interfaz de usuario tales como:
botones, barras de desplazamiento, menús pop-up, etc. La posición de
cada componente dentro de un panel se interpreta en relación a la
esquina inferior izquierda del panel. En general, si la GUI cambia de
tamaño, el panel y sus componentes también cambian de tamaño. Sin
embargo, se puede controlar el tamaño y la posición del panel y sus
componentes. Se puede hacer esto mediante el establecimiento de la
propiedad cambiar el tamaño de la GUI y proporcionar ResizeFcn
callback para el panel.
BUTTON GROUP
Los grupos de botones son como los paneles, excepto que manejan una
selección exclusiva de botones de opción y botones de selección. Si un
grupo de botones contiene un conjunto de botones de opción, botones
de selección, o ambas cosas, el grupo de botones permite que sólo uno
de ellos pueda ser seleccionado. Cuando un usuario hace clic en un
botón, el botón está seleccionado y todos los demás botones dejan de
estarlo. En la programación de un grupo de botones, se usa
51. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
1. Creación de formularios.
Abrir el editor de formularios,
digitando la orden guide en la
ventana de comandos, el cual
desplega el formulario en modo
de reja, en la cual se agragarán
los controles que se seleccionen
de la paleta.
>>guide
Se debe especificar el tamaño de
la GUI a un valor exacto,
efectuando un clic en la opción
View del menú de herramientas y
seleccionando luego la opción
Property Inspector del menú y
definir en la propiedad Position los
valores que deberá tener el
formulario.
51
52. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
2. Adición de componentes.
Seleccione los componentes de la paleta para
agregar y arrástrelos al área del esquema.
SOFTWARE DE SIMULACIÓN - BPDP 52
53. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
3. Alineación de objetos.
Para alinear los controles entre si, dé un clic en la
opción Align Objects del menú Tools. La herramienta
de alineación muestra los objetos seleccionados y se
prepara para ser alineado según las condiciones
seleccionadas.
SOFTWARE DE SIMULACIÓN - BPDP 53
54. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
4. Fijar propiedades para cada control.
Para poner las propiedades de cada control, dé un
clic en la opción View y seleccione luego la opción
Property Inspector, y defina los valores.
SOFTWARE DE SIMULACIÓN - BPDP 54
55. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
5. Activación de la Interfaz Gráfica de Usuario (GUI).
Active la GUI seleccionando Run del menú Tools o
use la flecha de color verde del toolbar de guide.
SOFTWARE DE SIMULACIÓN - BPDP 55
56. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA
6. Programación de la Interfaz Gráfica de Usuario (GUI).
Cuando se graba primero o activa una GUI, guide genera el
archivo .m de la aplicación que contendrá todo el código para
ejecutar y controlar la GUI. Se debe escribir dentro del callback de
las funciones, las órdenes que se ejecutarán cuando los usuarios
activen un control en la GUI. Guide genera este archivo .m, con
las subfunciones vacías para cada componente que tiene un
callback asociado con él.
SOFTWARE DE SIMULACIÓN - BPDP 56
% --- Executes on button press in surf.
function surf_Callback(hObject, eventdata, handles)
% hObject handle to surf (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
57. ELABORACIÓN DE UNA INTERFAZ
GRÁFICA6. Programación de la Interfaz Gráfica de Usuario (GUI).
SOFTWARE DE SIMULACIÓN - BPDP 57
function surf_Callback(hObject, eventdata, handles)
[x,y]=meshgrid(-5:.4:5);
z=(x.^2).*exp(-y.^2);
surf(z);
function mesh_Callback(hObject, eventdata, handles)
[x,y]=meshgrid(-8:.4:8,-3:0.3:5);
z=x.^2+y.^2;
mesh(z);
function contour_Callback(hObject, eventdata, handles)
[x,y]=meshgrid(-8:.4:8,-3:0.3:5);
z=(sin(x)./(y+9));
contour(x,y,z);
function menu_Callback(hObject, eventdata, handles)
opcion=get(handles.menu,'value');
switch opcion
case 1 %usuario seleccionó la primera opción
x=-8:0.2:8;
y=x.*sin(x);
plot(x,y)
grid on
xlabel('Eje X')
ylabel('Eje Y')
case 2 %usuario seleccionó la segunda opción
x=-8:0.2:8;
y=sin(x);
bar(x,y)
grid on
case 3 %usuario seleccionó la tercera opción
x=-5.5:0.2:5.5;
y=x.*sin(x);
polar(x,y)
grid on
end
58. ACCEDIENDO A LOS IDENTIFICADORES
• Cada identificador de un objeto se guarda en un
campo denominado estructuras de los identificadores,
teniendo el mismo nombre como el Tag del objeto.
SOFTWARE DE SIMULACIÓN - BPDP 58
Por ejemplo:
handles.surf, contiene el identificador del pushbutton 1
handles.mesh, contiene el identificador del pushbutton 2
handles.contour, contiene el identificador del pushbutton 3
handles.menu, contiene el identificador del popupmenu
id1=handles.surf
id2=handles.mesh
id3=handles.cont
our
id4=handles.men
u