Создайте и запустите простой figure- Базовое приложение

Примечание

Эта тема относится к программным приложениям , создаваемым, использующим figure функция. Альтернативные способы создать приложения см. в Способы создать приложения.

Этот пример показывает, как создать простое приложение программно, такое как показанное здесь.

Последующие разделы проведут вас через процесс создания этого приложения.

Если вы предпочитаете просматривать и запускать код, который создал это приложение, не создавая его, установите текущую папку на ту, к которой у вас есть доступ для записи. Скопируйте код примера и откройте его в редактор, выпустив следующий MATLAB® команды:

copyfile(fullfile(docroot, 'techdoc','creating_guis',...
  'examples','simple_gui2*.*')), fileattrib('simple_gui2*.*', '+w');
edit simple_gui2.m
Чтобы запустить код, перейдите в раздел Run на вкладке Editor. Затем нажмите Run .

Создайте файл кода

Создайте файл функции (в отличие от script file, который содержит последовательность команд MATLAB, но не определяет функции).

  1. В подсказке MATLAB введите edit.

  2. Введите следующий оператора в первой линии редактора.

    function simple_gui2
  3. После оператора функции введите эти комментарии, заканчивающиеся пустой линией. (Комментарии отображаются в командной строке в ответ на 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. В конце файла после пустой линии добавьте end оператор. Этот end оператор требуется, поскольку в примере используются вложенные функции. Дополнительные сведения см. в разделе Вложенные функции.

  5. Сохраните файл в текущей папке или в расположении, указанном в пути MATLAB.

Создайте окно фигуры

Чтобы создать контейнер для пользовательского интерфейса (UI) приложения, добавьте следующий код перед end оператор в вашем файле:

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

Вызов на figure функция создает традиционный рисунок и задает следующие свойства:

  • The Visible для свойства задано значение 'off' чтобы сделать окно невидимым при добавлении или инициализации компонентов. Окно становится видимым, когда пользовательский интерфейс имеет все свои компоненты и инициализируется.

  • The Position свойство устанавливается в четырехэлементный вектор, который задает местоположение пользовательского интерфейса на экране и его размер: [расстояние слева, расстояние от дна, ширина, высота]. Модулями по умолчанию являются пиксели.

Добавление компонентов к пользовательскому интерфейсу

Создайте кнопки, статический текст, всплывающее меню и компоненты осей для пользовательского интерфейса.

  1. Следуя вызову, чтобы 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]);

    Каждый оператор использует ряд выражений uicontrol property/value пар для определения кнопки:

    • The Style свойство задает, что uicontrol - кнопка нажатия.

    • The String свойство задает метку на каждой кнопке: Surf, Mesh, и Contour.

    • The Position свойство задает местоположение и размер каждой кнопки: [расстояние слева, расстояние снизу, ширина, высота]. Модулями по умолчанию для кнопок являются пиксели.

    Каждый uicontrol вызов возвращает указатель созданной кнопки.

  2. Добавьте всплывающее меню и текстовую метку путем добавления этих операторов в файл кода после определений кнопок. Первый оператор создает метку. Второй оператор создает всплывающее меню.

    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]);
    

    Компонент всплывающего меню String свойство использует массив ячеек, чтобы задать три элемента во всплывающем меню: Peaks, Membrane, и Sinc.

    Текстовый компонент, String свойство задает инструкции для пользователя.

    Для обоих компонентов Position свойство задает размер и расположение каждого компонента: [расстояние слева, расстояние от дна, ширина, высота]. Модулями по умолчанию для этих компонентов являются пиксели.

  3. Добавьте оси путем добавления этого оператора к файлу кода.

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

    The Units свойство задает пиксели так, чтобы оси имели те же модули, что и другие компоненты.

  4. Следуя всем определениям компонентов, добавьте эту линию в файл кода, чтобы выровнять все компоненты, кроме осей, по их центрам.

    align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');
  5. Добавьте эту команду после align команда.

    f.Visible = 'on';

    Ваш файл кода должен выглядеть следующим образом:

    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. Запустите свой код, набрав simple_gui2 в командной строке. Можно выбрать набор данных во всплывающем меню и нажать кнопки, но ничего не происходит. Это происходит потому, что в файле нет кода коллбэка для обслуживания всплывающего меню или кнопок.

Кодируйте поведение приложения

Программируйте всплывающее меню

Всплывающее меню позволяет пользователям выбирать данные для построения графика. Когда пользователь выбирает один из трех наборов данных во всплывающем меню, программное обеспечение MATLAB настраивает всплывающее меню Value свойство к индексу выбранного элемента меню. Обратный коллбэк всплывающего меню считывает всплывающее меню Value свойство, чтобы определить, какой элемент в данный момент отображается и устанавливает current_data соответственно.

Добавьте следующий коллбэк к своему файлу после кода инициализации и перед конечным end оператор.

%  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

Программируйте кнопки

Каждая из трех кнопок создает другой тип графика, используя данные, заданные текущим выбором во всплывающем меню. Кнопка коллбэков постройте график данных в current_data. Они автоматически имеют доступ к current_data потому что они вложены на более низком уровне.

Добавьте следующие коллбэки к файлу после коллбэка всплывающего меню и перед окончательным 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

Программируйте коллбэки

Когда пользователь выбирает набор данных из всплывающего меню или нажимает одну из кнопок, MATLAB выполняет коллбэк, связанную с этим конкретным событием. Используйте Callback каждого компонента свойство, задающее имя коллбэка, с которым связано каждое событие.

  1. На uicontrol оператор, который задает Surf кнопку, добавить пару свойство/значение

    'Callback',{@surfbutton_Callback}

    чтобы оператор выглядел так:

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

    Callback - имя свойства. surfbutton_Callback - имя коллбэка, который обслуживает Surf кнопку.

  2. На uicontrol оператор, который задает Mesh кнопку, добавить пару свойство/значение

    'Callback',@meshbutton_Callback
  3. На uicontrol оператор, который задает Contour кнопку, добавить пару свойство/значение

    'Callback',@contourbutton_Callback
  4. На uicontrol оператор, который задает всплывающее меню, добавьте пару свойство/значение

    'Callback',@popup_menu_Callback

Для получения дополнительной информации смотрите Запись коллбэков для приложений, созданных программно.

Инициализируйте пользовательский интерфейс

Инициализируйте пользовательский интерфейс, чтобы он был готов, когда окно станет видимым. Заставьте пользовательский интерфейс вести себя правильно, когда он изменяет размер путем изменения модулей компонента и рисунка на normalized. Это заставляет компоненты изменять размер при изменении размера пользовательского интерфейса. Нормированные модули левого нижнего угла окна рисунка (0,0) и правый верхний угол для (1.0, 1.0).

Замените этот код в редакторе:

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

с помощью этого кода:

% 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';

Проверьте код и запустите приложение

Убедитесь, что ваш код отображается должным образом, и запустите его.

  1. Проверьте, что ваш файл кода выглядит следующим образом:

    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. Запустите приложение, набрав simple_gui2 в командной строке. Код инициализации заставляет его отображать значение по умолчанию peaks данных с surf функция, делая пользовательский интерфейс таким.

  3. Во всплывающем меню выберите Membrane и нажмите кнопку Mesh. Пользовательский интерфейс отображает сетчатый график MathWorks® L-образный логотип мембраны.

  4. Попробуйте другие комбинации перед закрытием пользовательского интерфейса.

  5. Тип help simple_gui2 в командной строке. MATLAB отображает текст справки.

    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.

Похожие темы