Эта тема применяется к приложениям, создаваемым программно с помощью функции 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, но не задает функции).
В посдказке 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 и позже. Если вы используете более раннюю версию, используйте вместо этого функцию 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
Запустите свой код путем ввода 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 и позже. Если вы используете более раннюю версию, используйте вместо этого функцию 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')
.
Проверьте, что ваш файл кода выглядит так:
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.