Mostrando las entradas con la etiqueta Programmatic GUI. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programmatic GUI. Mostrar todas las entradas

martes, 13 de mayo de 2014

Personalizar Push Button en una GUI MATLAB


Cuando se crea un Push Button en una GUI MATLAB existen ciertas limitaciones para personalizar la visualización del mismo. De forma ordinaria se puede modificar el color de fondo mediante la propiedad BackgroundColor, el tamaño de fuente con FontSize, el estilo de fuente con FontWeight, el tipo de fuente con FontName, e incluso poner una imagen de fondo (Véase este post ). No obstante utilizando las bondades del lenguaje HTML se puede disponer de mayores opciones, enseguida se tratarán algunas de las características más importantes que pueden modificarse.

Colocar letras griegas 

En ingeniería es muy común el uso del alfabeto griego para representar diversas magnitudes. Para colocar letras griegas en el "String" del Push Button deben utilizarse las etiquetas HTML y anteponer un ampersand (&) al nombre de la letra griega. Por ejemplo si requiere utilizar la siguiente expresión: $Calcular\,\,\,\beta$, entonces deberá modificar el "String" como se muestra enseguida:

str='<html>Calcular &beta</html>';
set(hPB,'String',str);


En las líneas anteriores hPB es el handle del Push Button (en un Push Button creado con GUIDE se utilizar la referencia handles.tagBoton).


Subíndices y superíndices

En HTML se utilizan las etiquetas <sub></sub> para indicar un subíndice y <sup></sup> para superíndices. Claro, como en el caso anterior estas deben ir entre etiquetas HTML para que MATLAB lo reconozca como tal, véase el siguiente ejemplo en el cual se utiliza como "String" la expresión: $a^2+b^2=k_0$

str='<html>a<sup>2</sup>+b<sup>2</sup>=k<sub>0</sub></html>';
set(hPB,'String',str);



Múltiples líneas

Para colocar más de una linea en un Push Button puede utilizarse la etiqueta HTML de salto de línea <br>, véase el ejemplo a continuación:

str='<html>Primera línea <br> Segunda línea</html>';
set(hPB,'String',str);




Para una referencia más completa acerca de las características HTML vistas en este post puede visitar los siguientes enlaces:


lunes, 12 de mayo de 2014

Visualizador de imágenes


La siguiente GUI hace la función de un visualizador de imágenes, seleccionando una carpeta en la cual estén situadas las imagenes.

function verImg
clearvars('-global')
figure('MenuBar','none',...
    'NumberTitle','off',...
    'Name','Visualizador de imágenes',...
    'Resize','off',...
    'Position',[200 200 450 350]);
centerfig;

uimenu('Label','Seleccionar carpeta','Callback',@selFcn);

ax=axes('units','pixels',...
    'Position',[25 25 400 300],...
    'Visible','off');

uicontrol('style','push',...
    'String','<<',...
    'Position',[0 165 20 20],...
    'Callback',@cambiar);

uicontrol('style','push',...
    'String','>>',...
    'Position',[430 165 20 20],...
    'Callback',@cambiar);

    function selFcn(src,~)
        global carp Imgs cont
        cont=1;
        carp=uigetdir;
        if isequal(carp,0)
            return;
        end
        Imgs=dir([carp,'/*.jpg']);
        imshow(imread([carp,'/',Imgs(cont).name]));
    end

    function cambiar(src,~)
        global carp cont Imgs
        if (strcmp(get(src,'str'),'>>') && cont<length(Imgs))
            cont=cont+1;
            imshow(imread([carp,'/',Imgs(cont).name]));
        elseif (strcmp(get(src,'str'),'<<') && cont>1)
            cont=cont-1;
            imshow(imread([carp,'/',Imgs(cont).name]));
        end
    end
end




miércoles, 7 de mayo de 2014

Personalizar un msgbox


Para comenzar, un msgbox es un elemento gráfico utilizado para enviar mensajes al usuario, por ejemplo una sugerencia, un mensaje de advertencia o error. La sintaxis más simple para crear un msgbox es la siguiente:

msgbox('Mensaje','Título de la ventana');

Con la sintaxis anterior se muestra un msgbox con características ordinarias y establecidas por defecto, como el que se muestra enseguida:



La función msgbox no cuenta con argumentos de entrada que sirvan para especificar una apariencia diferente del cuadro de diálogo mostrado. Pero existe la posibilidad de personalizar un msgbox accediendo mediante referencias (handles) a sus componentes gráficos elementales.

Modificando el color de la ventana

Es evidente que la ventana gráfica de un msgbox es un elemento figure y por tanto pueden modificarse sus propiedades como tal; para ello debe utilizarse el handle del msgbox como argumento de la función set, véase el ejemplo mostrado enseguida:

h=msgbox('MATLAB TYP','V1');
set(h,'color','g'); % Establece color verde para la ventana



Modificando el tamaño, estilo y tipo de fuente.

Para configurar las propiedades del mensaje que se muestra debemos acceder a la referencia del edit text que lo contiene; utilizando la función allchild se obtienen todos los elementos gráficos "hijos" del objeto pasado como argumento, por ejemplo para el msgbox en cuestión:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);

La función allchild nos devuelve simplemente las referencias o handles de los objetos pero no indica el tipo de los mismos, para identificar el tipo de objeto gráfico puede utilizarse la función get como sigue:

>> get(ch,'type')

ans = 

    'axes'
    'uicontrol'

El objeto uicontrol es el botón mostrado en el msgbox, y el axes es el elemento que contiene al edit text que nos interesa; para obtener el handle del edit text podemos utilizar la función get como se muestra enseguida:

txt=get(ch(1),'children')

Con la  linea anterior se obtiene y guarda en la variable txt el handle del objeto "hijo" del axes, que en este caso es el edit text. Ahora, una vez que se dispone de la referencia, pueden modificarse las propiedades del edit text de forma ordinaria con la función set, en nuestro caso modificaremos específicamente la propiedad tamaño (FontSize), estilo (FontWeight) y tipo (FontName), véase el ejemplo siguiente:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);
txt = get(ch(1),'children');
set(txt,'FontSize',12,'FontName','Berlin Sans FB','FontWeight','bold');




Modificando el texto mostrado en el botón

El botón de un msgbox muestra por defecto un "OK", pero claro, es posible modificarlo y adaptarlo a las necesidades del usuario. Se mencionó con anterioridad que una de las referencia obtenidas y guardadas en la variable ch pertenecía al botón, entonces, para modificar el mensaje utilizamos esa referencia en la función set y configuramos la propiedad String como se muestra a continuación:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);
set(ch(2),'String','Cerrar');






viernes, 21 de marzo de 2014

Calculadora básica en MATLAB


Utilizando las siguientes líneas de código se puede crear una calculadora básica en MATLAB, lo cual suele ser una de las tareas iniciales en el desarrollo de GUIs. Se ha prescindido del entorno de desarrollo (GUIDE) en este caso.





function calculadora

% Calculadora básica
% $ Por: Jorge De Los Santos $
% $ http://matlab-typ.blogspot.com $
% $ Rev. 1.0.0 $ $ Fecha: 02/01/14 $

figure('MenuBar','none','NumberTitle','off','Name','Calculadora',...
    'position',[200 200 200 280],'resize','off');
centerfig(gcf);

p=uipanel(gcf,'units','pixels','position',[10 10 180 200]);

pantalla=uicontrol('style','text','string','',...
    'position',[10 230 180 40],'HorizontalAlignment','right',...
    'FontSize',20,'FontWeight','b','FontName','Courier');

% Botón AC (Limpiar)
uicontrol('style','push','string','AC','position',[60 195 40 15],...
    'backgroundcolor','r','callback',@acFcn,'foregroundcolor','w',...
    'fontweight','b');

% Botón OFF (Apagar)
uicontrol('style','push','string','OFF','position',[100 195 40 15],...
    'backgroundcolor','b','callback',@offFcn,'foregroundcolor','w',...
    'fontweight','b');

% Controles numéricos y operadores
uicontrol(p,'style','push','string','0','position',[8 8 35 35]);
uicontrol(p,'style','push','string','.','position',[51 8 35 35]);
uicontrol(p,'style','push','string','=','position',[94 8 35 35]);
uicontrol(p,'style','push','string','+','position',[137 8 35 35]);
uicontrol(p,'style','push','string','1','position',[8 51 35 35]);
uicontrol(p,'style','push','string','2','position',[51 51 35 35]);
uicontrol(p,'style','push','string','3','position',[94 51 35 35]);
uicontrol(p,'style','push','string','-','position',[137 51 35 35]);
uicontrol(p,'style','push','string','4','position',[8 94 35 35]);
uicontrol(p,'style','push','string','5','position',[51 94 35 35]);
uicontrol(p,'style','push','string','6','position',[94 94 35 35]);
uicontrol(p,'style','push','string','*','position',[137 94 35 35]);
uicontrol(p,'style','push','string','7','position',[8 137 35 35]);
uicontrol(p,'style','push','string','8','position',[51 137 35 35]);
uicontrol(p,'style','push','string','9','position',[94 137 35 35]);
uicontrol(p,'style','push','string','/','position',[137 137 35 35]);
set(findobj('parent',p),'callback',@calcFcn,'FontSize',14);

% Guarda y evalua los cálculos
    function calcFcn(src,~)
        global cnum ceval
        % cnum - Guarda cadena numérica
        % ceval - Guarda cadena a evaluar
        pres=get(src,'str');
        if ~any(strcmp(pres,{'*','/','+','-','='}))
            cnum=[cnum,pres];
            set(pantalla,'str',cnum);
        elseifany(strcmp(pres,{'+','-','*','/'}))
            ceval=[ceval,cnum,pres];
            cnum='';
        elseif strcmp(pres,'=')
            ceval=[ceval,cnum];
            set(pantalla,'str',str2num(ceval));
            ceval=get(pantalla,'str');
            cnum='';
        end
    end

% Borra pantalla y restaura variables
    function acFcn(~,~)
        global cnum ceval
        cnum='';
        ceval='';
        set(pantalla,'str','0');
    end

% "Apaga" la calculadora
    function offFcn(~,~)
        clearvars('-global','cnum','ceval');
        set(pantalla,'str','');
    end
end