Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Crear una aplicación sencilla mediante programación

Nota

Este tema se aplica a las aplicaciones que se crean mediante programación con la función de ilustración. Para obtener formas alternativas de compilar aplicaciones, consulte.Formas de crear aplicaciones

En este ejemplo se muestra cómo crear una aplicación sencilla mediante programación, como la que se muestra aquí.

Las secciones siguientes le guiarán a través del proceso de creación de esta aplicación.

Si prefiere ver y ejecutar el código que creó esta aplicación sin crearla, establezca la carpeta actual en una a la que tenga acceso de escritura. Copie el código de ejemplo y ábralo en el editor emitiendo los siguientes comandos:MATLAB®

copyfile(fullfile(docroot, 'techdoc','creating_guis',...   'examples','simple_gui2*.*')), fileattrib('simple_gui2*.*', '+w'); edit simple_gui2.m

Nota

Este código usa la notación de puntos para establecer propiedades de objetos gráficos. La notación de puntos se ejecuta en la versión r2014b y posterior. Si está utilizando una versión anterior, utilice la función en su lugar.set Por ejemplo, cambie a.f.Visible = 'on'set(f,'Visible','on')

Para ejecutar el código, vaya a la sección de la pestaña.RunEditor A continuación, haga clicRun .

Cree un archivo de código

Cree un archivo de función (en contraposición a a, que contiene una secuencia de comandos pero no define funciones).archivo de scriptMATLAB

  1. En el símbolo del sistema, escriba.MATLABedit

  2. Escriba la siguiente instrucción en la primera línea del editor.

    function simple_gui2
  3. Después de la instrucción de función, escriba estos comentarios, terminando con una línea en blanco. (Los comentarios se muestran en la línea de comandos en respuesta al comando.)help

    % SIMPLE_GUI2 Select a data set from the pop-up menu, then
    % click one of the plot-type push buttons. Clicking the button
    % plots the selected data in the axes.
    (Leave a blank line here)
  4. Al final del archivo, después de la línea en blanco, agregue una instrucción.end Esta instrucción es obligatoria porque el ejemplo utiliza funciones anidadas.end Para obtener más información, consulte.Funciones anidadas

  5. Guarde el archivo en la carpeta actual o en una ubicación que se encuentra en la ruta de acceso.MATLAB

Cree la ventana de figura

Para crear un contenedor para la interfaz de usuario (IU) de la aplicación, agregue el siguiente código antes de la instrucción en el archivo:end

%  Create and then hide the UI as it is being constructed. f = figure('Visible','off','Position',[360,500,450,285]);

La llamada a la función crea una figura tradicional y establece las siguientes propiedades:figure

  • La propiedad se establece para que la ventana sea invisible a medida que se agregan o se inicializan los componentes.Visible'off' La ventana se vuelve visible cuando la interfaz de usuario tiene todos sus componentes y se inicializa.

  • La propiedad se establece en un vector de cuatro elementos que especifica la ubicación de la interfaz de usuario en la pantalla y su tamaño: [distancia desde la izquierda, distancia desde la parte inferior, anchura, altura].Position Las unidades predeterminadas son píxeles.

Agregar componentes a la interfaz de usuario

Cree los botones de inserción, el texto estático, el menú emergente y los componentes de los ejes en la interfaz de usuario.

  1. Después de la llamada a, agregue estas instrucciones al archivo de código para crear tres componentes de botón de inserción.figure

    % Construct the components. hsurf    = uicontrol('Style','pushbutton',...              'String','Surf','Position',[315,220,70,25]); hmesh    = uicontrol('Style','pushbutton',...              'String','Mesh','Position',[315,180,70,25]); hcontour = uicontrol('Style','pushbutton',...              'String','Contour','Position',[315,135,70,25]);

    Cada sentencia utiliza una serie de pares de propiedades/valores para definir un pulsador:uicontrol

    • La propiedad especifica que el uicontrol es un botón de inserción.Style

    • La propiedad especifica la etiqueta en cada botón pulsador:,, y.StringSurfMeshContour

    • La propiedad especifica la ubicación y el tamaño de cada pulsador: [distancia desde la izquierda, distancia desde la parte inferior, anchura, altura].Position Las unidades predeterminadas para los botones de inserción son píxeles.

    Cada llamada devuelve el identificador del botón de inserción creado.uicontrol

  2. Agregue el menú emergente y una etiqueta de texto agregando estas instrucciones al archivo de código siguiendo las definiciones del botón de inserción. La primera instrucción crea la etiqueta. La segunda instrucción crea el menú emergente.

    htext  = uicontrol('Style','text','String','Select Data',...            'Position',[325,90,60,15]); hpopup = uicontrol('Style','popupmenu',...            'String',{'Peaks','Membrane','Sinc'},...            'Position',[300,50,100,25]); 

    La propiedad de componente de menú emergente utiliza una matriz de celdas para especificar los tres elementos en el menú emergente:, y.StringPeaksMembraneSinc

    El componente de texto, la propiedad especifica instrucciones para el usuario.String

    Para ambos componentes, la propiedad especifica el tamaño y la ubicación de cada componente: [distancia desde la izquierda, distancia desde la parte inferior, anchura, altura].Position Las unidades predeterminadas para estos componentes son píxeles.

  3. Agregue los ejes agregando esta instrucción al archivo de código.

    ha = axes('Units','pixels','Position',[50,60,200,185]);

    La propiedad especifica los píxeles para que los ejes tengan las mismas unidades que los demás componentes.Units

  4. Después de todas las definiciones de componente, agregue esta línea al archivo de código para alinear todos los componentes, excepto los ejes, a lo largo de sus centros.

    align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');
  5. Agregue este comando después del comando.align

    Nota

    Este código usa la notación de puntos para establecer las propiedades del objeto. La notación de puntos se ejecuta en la versión r2014b y posterior. Si está utilizando una versión anterior, utilice la función en su lugar.set Por ejemplo, cambie a.f.Visible = 'on'set(f,'Visible','on')

    f.Visible = 'on';

    El archivo de código debe ser como este:

    function simple_gui2 % SIMPLE_GUI2 Select a data set from the pop-up menu, then % click one of the plot-type push buttons. Clicking the button % plots the selected data in the axes.     %  Create and then hide the UI as it is being constructed.    f = figure('Visible','off','Position',[360,500,450,285]);        %  Construct the components.    hsurf = uicontrol('Style','pushbutton','String','Surf',...            'Position',[315,220,70,25]);    hmesh = uicontrol('Style','pushbutton','String','Mesh',...            'Position',[315,180,70,25]);    hcontour = uicontrol('Style','pushbutton',...            'String','Contour',...            'Position',[315,135,70,25]);     htext = uicontrol('Style','text','String','Select Data',...            'Position',[325,90,60,15]);    hpopup = uicontrol('Style','popupmenu',...            'String',{'Peaks','Membrane','Sinc'},...            'Position',[300,50,100,25]);    ha = axes('Units','Pixels','Position',[50,60,200,185]);     align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');        % Make the UI visible.    f.Visible = 'on';  end
  6. Ejecute el código escribiendo en la línea de comandos.simple_gui2 Puede seleccionar un conjunto de datos en el menú emergente y hacer clic en los botones de inserción, pero no sucede nada. Esto se debe a que no hay ningún código de devolución de llamada en el archivo para realizar el servicio del menú emergente o los botones.

Codificar el comportamiento de la aplicación

Programa el menú emergente

El menú emergente permite a los usuarios seleccionar los datos que se trazan. Cuando un usuario selecciona uno de los tres conjuntos de datos en el menú emergente, el software establece la propiedad del menú emergente en el índice del elemento de menú seleccionado.MATLABValue La devolución de llamada del menú emergente lee la propiedad del menú emergente para determinar qué elemento se muestra actualmente y se establece en consecuencia.Valuecurrent_data

Agregue la siguiente devolución de llamada al archivo después del código de inicialización y antes de la instrucción final.end

Nota

Este código usa la notación de puntos para obtener propiedades del objeto. La notación de puntos se ejecuta en la versión r2014b y posterior. Si está utilizando una versión anterior, utilice la función en su lugar.get Por ejemplo, cambie a.str = source.Stringstr = get(source,'String')

%  Pop-up menu callback. Read the pop-up menu Value property to %  determine which item is currently displayed and make it the %  current data. This callback automatically has access to  %  current_data because this function is nested at a lower level.    function popup_menu_Callback(source,eventdata)        % Determine the selected data set.       str = source.String;       val = source.Value;       % Set current data to the selected data set.       switch str{val};       case 'Peaks' % User selects Peaks.          current_data = peaks_data;       case 'Membrane' % User selects Membrane.          current_data = membrane_data;       case 'Sinc' % User selects Sinc.          current_data = sinc_data;       end    end

Programa los pulsadores

Cada uno de los tres pulsadores crea un tipo de trazado diferente utilizando los datos especificados por la selección actual en el menú emergente. Las devoluciones de llamada del botón de inserción trazan los datos.current_data Automáticamente tienen acceso a porque están anidados en un nivel inferior.current_data

Agregue las siguientes devoluciones de llamada al archivo después de la devolución de llamada del menú emergente y antes de la instrucción final.end

% Push button callbacks. Each callback plots current_data in the % specified plot type.  function surfbutton_Callback(source,eventdata)  % Display surf plot of the currently selected data.      surf(current_data); end  function meshbutton_Callback(source,eventdata)  % Display mesh plot of the currently selected data.      mesh(current_data); end  function contourbutton_Callback(source,eventdata)  % Display contour plot of the currently selected data.      contour(current_data); end

Programa los callbacks

Cuando el usuario selecciona un conjunto de datos en el menú emergente o hace clic en uno de los botones de inserción, el software ejecuta la devolución de llamada asociada a ese evento en particular.MATLAB Utilice la propiedad de cada componente para especificar el nombre de la devolución de llamada con la que se asocia cada evento.Callback

  1. Para la instrucción que define el botón de inserción, agregue el par de propiedades/valoruicontrolSurf

    'Callback',{@surfbutton_Callback}

    para que la declaración tenga este aspecto:

    hsurf = uicontrol('Style','pushbutton','String','Surf',...         'Position',[315,220,70,25],...         'Callback',{@surfbutton_Callback});

    es el nombre de la propiedad. es el nombre de la devolución de llamada que los servicios del botón de inserción.Callbacksurfbutton_CallbackSurf

  2. Para la instrucción que define el botón de inserción, agregue el par de propiedades/valoruicontrolMesh

    'Callback',@meshbutton_Callback
  3. Para la instrucción que define el botón de inserción, agregue el par de propiedades/valoruicontrolContour

    'Callback',@contourbutton_Callback
  4. Para la instrucción que define el menú emergente, agregue el par propiedad/valoruicontrol

    'Callback',@popup_menu_Callback

Para obtener más información, consulte.Escribir devoluciones de llamada para aplicaciones creadas mediante programación

Inicializar la interfaz de usuario

Inicializar la interfaz de usuario, por lo que está listo cuando la ventana se hace visible. Haga que la interfaz de usuario se comporte correctamente cuando cambie el tamaño cambiando el componente y las unidades de figura.normalized Esto hace que los componentes cambiar de tamaño cuando se cambia el tamaño de la interfaz de usuario. Las unidades normalizadas asignan la esquina inferior izquierda de la ventana de la figura a y la esquina superior derecha a.(0,0)(1.0, 1.0)

Nota

Este código usa la notación de puntos para establecer las propiedades del objeto. La notación de puntos se ejecuta en la versión r2014b y posterior. Si está utilizando una versión anterior, utilice la función en su lugar.set Por ejemplo, cambie a.f.Units = 'normalized'set(f,'Units','normalized')

Reemplace este código en el editor:

% Make the UI visible. f.Visible = 'on';

con este código:

% Initialize the UI. % Change units to normalized so components resize automatically. f.Units = 'normalized'; ha.Units = 'normalized'; hsurf.Units = 'normalized'; hmesh.Units = 'normalized'; hcontour.Units = 'normalized'; htext.Units = 'normalized'; hpopup.Units = 'normalized';  % Generate the data to plot. peaks_data = peaks(35); membrane_data = membrane; [x,y] = meshgrid(-8:.5:8); r = sqrt(x.^2+y.^2) + eps; sinc_data = sin(r)./r;  % Create a plot in the axes. current_data = peaks_data; surf(current_data);  % Assign a name to appear in the window title. f.Name = 'Simple GUI';  % Move the window to the center of the screen. movegui(f,'center')  % Make the UI visible. f.Visible = 'on';

Compruebe el código y ejecute la aplicación

Asegúrese de que el código aparece como debería y, a continuación, ejecútelo.

Nota

Este código usa la notación de puntos para obtener y establecer las propiedades del objeto. La notación de puntos se ejecuta en la versión r2014b y posterior. Si está utilizando una versión anterior, utilice las funciones y en su lugar.getset Por ejemplo, cambie a.f.Units = 'normalized'set(f,'Units','normalized')

  1. Compruebe que el archivo de código tiene este aspecto:

    function simple_gui2 % SIMPLE_GUI2 Select a data set from the pop-up menu, then % click one of the plot-type push buttons. Clicking the button % plots the selected data in the axes.  %  Create and then hide the UI as it is being constructed. f = figure('Visible','off','Position',[360,500,450,285]);  % Construct the components. hsurf    = uicontrol('Style','pushbutton',...              'String','Surf','Position',[315,220,70,25],...              'Callback',@surfbutton_Callback); hmesh    = uicontrol('Style','pushbutton',...              'String','Mesh','Position',[315,180,70,25],...              'Callback',@meshbutton_Callback); hcontour = uicontrol('Style','pushbutton',...              'String','Contour','Position',[315,135,70,25],...              'Callback',@contourbutton_Callback); htext  = uicontrol('Style','text','String','Select Data',...            'Position',[325,90,60,15]); hpopup = uicontrol('Style','popupmenu',...            'String',{'Peaks','Membrane','Sinc'},...            'Position',[300,50,100,25],...            'Callback',@popup_menu_Callback); ha = axes('Units','pixels','Position',[50,60,200,185]); align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');  % Initialize the UI. % Change units to normalized so components resize automatically. f.Units = 'normalized'; ha.Units = 'normalized'; hsurf.Units = 'normalized'; hmesh.Units = 'normalized'; hcontour.Units = 'normalized'; htext.Units = 'normalized'; hpopup.Units = 'normalized';  % Generate the data to plot. peaks_data = peaks(35); membrane_data = membrane; [x,y] = meshgrid(-8:.5:8); r = sqrt(x.^2+y.^2) + eps; sinc_data = sin(r)./r;  % Create a plot in the axes. current_data = peaks_data; surf(current_data);  % Assign the a name to appear in the window title. f.Name = 'Simple GUI';  % Move the window to the center of the screen. movegui(f,'center')  % Make the window visible. f.Visible = 'on';  %  Pop-up menu callback. Read the pop-up menu Value property to %  determine which item is currently displayed and make it the %  current data. This callback automatically has access to  %  current_data because this function is nested at a lower level.    function popup_menu_Callback(source,eventdata)        % Determine the selected data set.       str = get(source, 'String');       val = get(source,'Value');       % Set current data to the selected data set.       switch str{val};       case 'Peaks' % User selects Peaks.          current_data = peaks_data;       case 'Membrane' % User selects Membrane.          current_data = membrane_data;       case 'Sinc' % User selects Sinc.          current_data = sinc_data;       end    end    % Push button callbacks. Each callback plots current_data in the   % specified plot type.    function surfbutton_Callback(source,eventdata)    % Display surf plot of the currently selected data.        surf(current_data);   end    function meshbutton_Callback(source,eventdata)    % Display mesh plot of the currently selected data.        mesh(current_data);   end    function contourbutton_Callback(source,eventdata)    % Display contour plot of the currently selected data.        contour(current_data);   end end
  2. Ejecute la aplicación escribiendo en la línea de comandos.simple_gui2 El código de inicialización hace que se muestren los datos predeterminados con la función, por lo que la interfaz de usuario se ve así.peakssurf

  3. En el menú emergente, seleccione y, a continuación, haga clic en el botón.MembraneMesh La interfaz de usuario muestra una gráfica de malla de la Logotipo de membrana en forma de LMathWorks®.

  4. Pruebe otras combinaciones antes de cerrar la interfaz de usuario.

  5. Escriba en la línea de comandos. software muestra el texto de ayuda.help simple_gui2MATLAB

    help simple_gui2   SIMPLE_GUI2 Select a data set from the pop-up menu, then   click one of the plot-type push buttons. Clicking the button   plots the selected data in the axes.

Temas relacionados