Создавание простого приложения программно

Примечание

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

В этом примере показано, как создать простое приложение программно, такое как показанное здесь.

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

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

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

Примечание

Этот код использует запись через точку, чтобы установить свойства графического объекта. Запись через точку запускается в R2014b и позже. Если вы используете более ранний релиз, используйте set функцию вместо этого. Например, измените f.Visible = 'on' к set(f,'Visible','on').

Чтобы запустить код, перейдите к разделу 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 функция создает традиционную фигуру и устанавливает следующие свойства:

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

  • 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 пары свойства/значения, чтобы задать кнопку:

    • Style свойство указывает, что uicontrol является кнопкой.

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

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

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

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

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

    Примечание

    Этот код использует запись через точку, чтобы установить свойства объектов. Запись через точку запускается в R2014b и позже. Если вы используете более ранний релиз, используйте set функцию вместо этого. Например, измените f.Visible = 'on' к set(f,'Visible','on').

    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 оператор.

Примечание

Этот код использует запись через точку, чтобы получить свойства объектов. Запись через точку запускается в R2014b и позже. Если вы используете более ранний релиз, используйте get функцию вместо этого. Например, измените str = source.String к str = 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

Программирование кнопок

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

Примечание

Этот код использует запись через точку, чтобы установить свойства объектов. Запись через точку запускается в R2014b и позже. Если вы используете более ранний релиз, используйте set функцию вместо этого. Например, измените f.Units = 'normalized' к set(f,'Units','normalized').

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

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

Проверка кода и выполнение приложения

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

Примечание

Этот код использует запись через точку, чтобы получить и установить свойства объектов. Запись через точку запускается в R2014b и позже. Если вы используете более ранний релиз, используйте get и set функции вместо этого. Например, измените f.Units = 'normalized' к set(f,'Units','normalized').

  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.

Похожие темы