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

В последующих разделах описывается процесс создания этого приложения.
Если вы предпочитаете просматривать и запускать код, который создал это приложение, не создавая его, установите текущую папку, к которой у вас есть доступ для записи. Скопируйте пример кода и откройте его в редакторе путем ввода следующих команд MATLAB ®:
copyfile(fullfile(docroot, 'techdoc','creating_guis',... 'examples','simple_gui2*.*')), fileattrib('simple_gui2*.*', '+w'); edit simple_gui2.m
Создайте файл функции (в отличие от файла сценария, который содержит последовательность команд MATLAB, но не определяет функции).
В приглашении MATLAB введите edit.
Введите следующую инструкцию в первой строке редактора.
function simple_gui2После инструкции function введите эти комментарии, оканчиваясь пустой строкой. (Комментарии отображаются в командной строке в ответ на 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)В конце файла после пустой строки добавьте end заявление. Это end требуется, поскольку в примере используются вложенные функции. Дополнительные сведения см. в разделе Вложенные функции.
Сохраните файл в текущей папке или в папке, указанной в пути MATLAB.
Чтобы создать контейнер для пользовательского интерфейса приложения, добавьте следующий код перед 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 свойство имеет четырехэлементный вектор, определяющий местоположение пользовательского интерфейса на экране и его размер: [расстояние слева, расстояние снизу, ширина, высота]. Единицами измерения по умолчанию являются пикселы.
Создайте кнопки, статический текст, всплывающее меню и компоненты осей для пользовательского интерфейса.
После вызова 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 свойство определяет метку на каждой кнопке: Surf, Mesh, и Contour.
Position свойство определяет местоположение и размер каждой кнопки: [расстояние слева, расстояние снизу, ширина, высота]. Единицами измерения по умолчанию для кнопок являются пикселы.
Каждый uicontrol вызов возвращает дескриптор созданной кнопки.
Добавьте всплывающее меню и текстовую метку, добавив эти инструкции в файл кода, следуя описаниям кнопок. Первая инструкция создает метку. Вторая инструкция создает всплывающее меню.
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 свойство определяет размер и местоположение каждого компонента: [расстояние слева, расстояние снизу, ширина, высота]. Единицами измерения по умолчанию для этих компонентов являются пикселы.
Добавьте оси, добавив этот оператор в файл кода.
ha = axes('Units','pixels','Position',[50,60,200,185]);
Units свойство задает пикселы так, чтобы оси имели те же единицы измерения, что и другие компоненты.
Следуя всем определениям компонентов, добавьте эту строку в файл кода для выравнивания всех компонентов, за исключением осей, по их центрам.
align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');
Добавьте эту команду после 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
Запустите код, введя 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 для указания имени обратного вызова, с которым связано каждое событие.
В uicontrol оператор, определяющий кнопку Surf, добавьте пару свойство/значение
'Callback',{@surfbutton_Callback}таким образом, оператор выглядит следующим образом:
hsurf = uicontrol('Style','pushbutton','String','Surf',... 'Position',[315,220,70,25],... 'Callback',{@surfbutton_Callback});
Callback - имя свойства. surfbutton_Callback - это имя обратного вызова, обслуживающего кнопку Surf.
В uicontrol оператор, определяющий кнопку Mesh, добавьте пару свойство/значение
'Callback',@meshbutton_CallbackВ uicontrol оператор, определяющий кнопку «Контур», добавьте пару свойство/значение
'Callback',@contourbutton_CallbackВ 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';
Убедитесь, что ваш код выглядит как надо, а затем запустите его.
Убедитесь, что файл кода выглядит следующим образом:
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
Запустите приложение, введя simple_gui2 в командной строке. Код инициализации приводит к отображению значения по умолчанию peaks данные с помощью surf функция, делающая пользовательский интерфейс похожим на этот.

Во всплывающем меню выберите «Мембрана» и нажмите кнопку «Сетка». Пользовательский интерфейс отображает сетчатый график логотипа L-образной мембраны MathWorks ®.
Попробуйте другие комбинации перед закрытием пользовательского интерфейса.
Напечатать 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.