Эта тема применяется к приложениям, создаваемым программно с помощью функции figure. Для альтернативных способов создать приложения, смотрите Способы Создать Приложения.
Этот пример показывает, как создать простое приложение программно, такой как один показанный здесь.
Последующие разделы проводят вас по процессу создавания этого приложения.
Если вы предпочитаете просматривать и запускать код, который создал это приложение, не создавая его, установите свою текущую папку на одну, к которой у вас есть доступ для записи. Скопируйте пример кода и откройте его в Редакторе путем выдачи следующих команд MATLAB®:
copyfile(fullfile(docroot, 'techdoc','creating_guis',... 'examples','simple_gui2*.*')), fileattrib('simple_gui2*.*', '+w'); edit simple_gui2.m
Этот код использует запись через точку, чтобы установить свойства графического объекта. Запись через точку запускается в R2014b и позже. If you are using an earlier release, use the set function instead.
, Например, изменение f.Visible = 'on'
к set(f,'Visible','on')
.
Чтобы запустить код, перейдите к разделу Run во вкладке Editor. Затем нажмите Run.
Создайте функциональный файл (в противоположность файлу скрипта, который содержит последовательность команд 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
.
Этот код использует запись через точку, чтобы установить свойства объектов. Запись через точку запускается в R2014b и позже. If you are using an earlier release, use the set function instead.
, Например, изменение 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
Запустите свой код путем ввода 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
каждого компонента задать имя обратного вызова, с которым сопоставлено каждое событие.
К оператору 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)
.
Этот код использует запись через точку, чтобы установить свойства объектов. Запись через точку запускается в R2014b и позже. If you are using an earlier release, use the set function instead.
, Например, изменение 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 и позже. If you are using an earlier release, use the get and set functions instead.
, Например, изменение
f.Units = 'normalized'
к set(f,'Units','normalized')
.
Проверьте, что ваш файл кода выглядит так:
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.