figure
- Основанное ПриложениеПримечание
Эта тема применяется к приложениям, создаваемым программно с помощью figure
функция. Для альтернативных способов создать приложения, смотрите Способы Создать Приложения.
В этом примере показано, как создать простое приложение программно, такое как показанное здесь.
Последующие разделы проводят вас по процессу создавания этого приложения.
Если вы предпочитаете просматривать и запускать код, который создал это приложение, не создавая его, установите свою текущую папку на одну, к которой у вас есть доступ для записи. Скопируйте пример кода и откройте его в Редакторе путем выдачи следующих команд MATLAB®:
copyfile(fullfile(docroot, 'techdoc','creating_guis',... 'examples','simple_gui2*.*')), fileattrib('simple_gui2*.*', '+w'); edit simple_gui2.m
Создайте файл функции (в противоположность script file, который содержит последовательность команд MATLAB, но не задает функции).
В подсказке MATLAB введите edit
.
Введите следующий оператор в первой линии Редактора.
function simple_gui2
После функционального оператора введите эти комментарии, заканчивающиеся пустой строкой. (Комментарии отображаются в командной строке в ответ на 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.
Чтобы создать контейнер для пользовательского интерфейса (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
свойство установлено в четырехэлементный вектор, который задает местоположение пользовательского интерфейса на экране и его размере: [расстояние от левого, расстояние от нижней части, ширины, высота]. Модули по умолчанию являются пикселями.
Создайте кнопки, статический текст, всплывающее меню и компоненты осей к пользовательскому интерфейсу.
После вызова 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
оператор, который задает кнопку Contour, добавляет пару свойства/значения
'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
функция, заставляя пользовательский интерфейс выглядеть так.
Во всплывающем меню выберите Membrane, и затем нажмите кнопку Mesh. Пользовательский интерфейс отображает сетчатый график MathWorks® L-образный Мембранный логотип.
Попробуйте другие комбинации прежде, чем закрыть пользовательский интерфейс.
Введите 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.