Примечание
Окружение GUIDE будет удаляемо в следующем релизе. После удаления GUIDE существующие приложения GUIDE будут продолжать запускаться в MATLAB® но они не будут редактироваться в GUIDE.
Чтобы продолжить редактирование существующего приложения GUIDE, смотрите GUIDE Migration Strategies для получения информации о том, как помочь поддерживать совместимость приложения с будущими релизами MATLAB. Чтобы создать новые приложения в интерактивном режиме, вместо этого Разрабатывайте приложения с использованием App Designer.
Кодирование поведения компонента пользовательского интерфейса включает определенные задачи, которые уникальны для типа компонента, с которым вы работаете. Этот раздел содержит простые примеры коллбэков для каждого типа компонента. Для получения общей информации о кодировании обратных вызовов смотрите Запись коллбэков в GUIDE или Запись коллбэков для приложений, созданных программно.
Если вы работаете в GUIDE, щелкните правой кнопкой мыши компонент в вашем размещении и выберите соответствующее свойство коллбэка из меню View Callbacks. Это создает пустую функцию обратного вызова, которая автоматически связана с компонентом. Конкретное имя функции, которое создает GUIDE, основано на Tag
компонента свойство, поэтому ваше имя функции может немного отличаться от имени функции в коде примера. Не изменяйте имя функции, которую GUIDE создает в вашем коде. Чтобы использовать пример кода в вашем приложении, скопируйте код из тела функции примера в тело вашей функции.
Этот код является примером функции обратного вызова кнопки в GUIDE. Связать эту функцию с помощью кнопки Callback
свойство для выполнения при нажатии конечным пользователем кнопки.
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Goodbye'); close(gcf);
Первая строка кода, display('Goodbye')
, отображает 'Goodbye'
в Командном окне. Следующая линия получает окно UI с помощью gcf
и затем закрывает его.
Этот код является примером функции кнопки-переключателя обратного вызова в GUIDE. Связать эту функцию с кнопкой-переключателем Callback
свойство для выполнения при нажатии конечным пользователем на кнопку-переключатель.
function togglebutton1_Callback(hObject,eventdata,handles) % hObject handle to togglebutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of togglebutton1 button_state = get(hObject,'Value'); if button_state == get(hObject,'Max') display('down'); elseif button_state == get(hObject,'Min') display('up'); end
Область кнопки-переключателя Value
свойство соответствует Min
свойство, когда кнопка-переключатель включена. The Value
изменения в Max
значение, когда кнопка-переключатель нажата. Эта функция обратного вызова получает кнопку-переключатель Value
свойство и затем сравнивает его с Max
и Min
свойства. Если кнопка нажата, отобразится функция 'down'
в Командном окне. Если кнопка включена, отобразится функция 'up'
.
Этот код является примером функции обратного вызова переключателя в GUIDE. Связать эту функцию с переключателем Callback
свойство для выполнения при нажатии конечным пользователем переключателя.
function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton1 if (get(hObject,'Value') == get(hObject,'Max')) display('Selected'); else display('Not selected'); end
Переключатель Value
свойство соответствует Min
Свойство, когда переключатель не выбран. The Value
изменения в Max
значение при выборе переключателя. Эта функция обратного вызова получает Value
переключателя свойство и затем сравнивает его с
Max
и Min
свойства. Если выбрана кнопка, отобразится функция 'Selected'
в Командном окне. Если кнопка не выбрана, отобразится функция 'Not selected'
.
Примечание
Используйте группу кнопок, чтобы управлять эксклюзивным поведением выбора для переключателей. Для получения дополнительной информации см. раздел «Группа кнопок».
Этот код является примером функции обратного вызова с флажком в GUIDE. Связать эту функцию с флажком Callback
свойство для выполнения при нажатии на флажок конечным пользователем.
function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to checkbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of checkbox1 if (get(hObject,'Value') == get(hObject,'Max')) display('Selected'); else display('Not selected'); end
Флажок Value
свойство соответствует Min
свойство, если флажок не установлен. The Value
изменения в Max
значение при установке флажка. Эта функция обратного вызова получает значения флажка Value
свойство и затем сравнивает его с Max
и Min
свойства. Если флажок установлен, отобразится функция 'Selected'
в Командном окне. Если флажок не установлен, он отображается 'Not selected'
.
Этот код является примером коллбэка для текстового поля редактирования в GUIDE. Связать эту функцию с Callback
uicontrol свойство, чтобы заставить его выполнить, когда конечный пользователь вводит внутрь текстового поля.
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents as double input = get(hObject,'String'); display(input);
Когда пользователь вводит символы в текстовое поле и нажимает клавишу Enter, функция обратного вызова извлекает эти символы и отображает их в Командном окне.
Чтобы пользователи могли вводить несколько линии текста, установите Max
и Min
свойства к числовым значениям, которые удовлетворяют Max - Min > 1
. Для примера задайте Max
на 2
, и Min
на 0
чтобы удовлетворить неравенство. В этом случае функция обратного вызова запускается, когда конечный пользователь кликает по области в пользовательском интерфейсе, которая находится вне текстового поля.
Если вы хотите интерпретировать содержимое текстового поля редактирования как числовые значения, преобразуйте символы в числа с помощью str2double
функция. str2double
функция возвращает NaN
для нечислового входа.
Этот код является примером функции обратного вызова текстового поля редактирования, которая интерпретирует вход пользователя как числовые значения.
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents as a double input = str2double(get(hObject,'String')); if isnan(input) errordlg('You must enter a numeric value','Invalid Input','modal') uicontrol(hObject) return else display(input); end
Когда конечный пользователь вводит значения в текстовое поле редактирования и нажимает клавишу Enter, функция обратного вызова получает значение String
свойство и преобразует его в числовое значение. Затем он проверяет, является ли значение NaN
(нечисловой). Если вход NaN
, после чего при коллбэке появляется диалоговое окно с ошибкой.
Этот код является примером функции обратного вызова ползунка в GUIDE. Связать эту функцию с ползунком Callback
свойство, чтобы заставить его выполнить, когда конечный пользователь перемещает ползунок.
function slider1_Callback(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider % get(hObject,'Min') and get(hObject,'Max') to determine... slider_value = get(hObject,'Value'); display(slider_value);
Когда конечный пользователь перемещает ползунок, функция обратного вызова получает текущее значение ползунка и отображает его в Командном окне. По умолчанию область значений ползунков равна [0, 1]. Чтобы изменить область значений, установите Max
ползунка и
Min
свойства до максимального и минимального значений, соответственно.
Если вы разрабатываете приложение с помощью GUIDE, используйте поле списка CreateFcn
коллбэк для добавления элементов в поле списка.
Этот код является примером окна списка CreateFcn
коллбэк, который заполняет поле списка элементами, Red
, Green
, и Blue
.
function listbox1_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns % Hint: listbox controls usually have a white background on Windows. if ispc && isequal(get(hObject,'BackgroundColor'), ... get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Red';'Green';'Blue'});
set(hObject,'String',{'Red';'Green';'Blue'})
, заполняет содержимое списка.Когда конечный пользователь выбирает элемент окна списка, поле списка Value
свойство изменяется на число, соответствующее положению элемента в списке. Для примера значение 1
соответствует первому элементу списка. Если вы хотите изменить выбор в коде, измените Value
свойство другому числу между 1
и количество элементов в списке.
Для примера можно использовать handles
структура в GUIDE для доступа к полю списка и изменения Value
свойство:
set(handles.listbox1,'Value',2)
Первый аргумент, handles.listbox1
, может быть различным в коде, в зависимости от значения окна списка Tag
свойство.
Этот код является примером функции обратного вызова списка в GUIDE. Связать эту функцию с полем списка Callback
свойство, которое будет выполняться при выборе элемента в списке.
function listbox1_Callback(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns contents % contents{get(hObject,'Value')} returns selected item from listbox1 items = get(hObject,'String'); index_selected = get(hObject,'Value'); item_selected = items{index_selected}; display(item_selected);
Когда конечный пользователь выбирает элемент в списке, функция обратного вызова выполняет следующие задачи:
Получает все элементы в списке и хранит их в переменной, items
.
Получает числовой индекс выбранного элемента и сохраняет его в переменной, index_selected
.
Получает значение выбранного элемента и сохраняет его в переменной, item_selected
.
Отображение выбранного элемента в Командном окне MATLAB.
Пример, Приложение с интерактивным списком в GUIDE показов как заполнить список именами директории.
Если вы разрабатываете приложение с помощью GUIDE, используйте всплывающее меню CreateFcn
коллбэк для добавления элементов во всплывающее меню.
Этот код является примером всплывающего меню CreateFcn
коллбэк, который заполняет меню элементами, Red
, Green
, и Blue
.
function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns % Hint: popupmenu controls usually have a white background on Windows. if ispc && isequal(get(hObject,'BackgroundColor'),... get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Red';'Green';'Blue'});
set(hObject,'String',{'Red';'Green';'Blue'})
, заполняет содержимое всплывающего меню.Когда конечный пользователь выбирает элемент, всплывающее меню Value
свойство изменяется на число, соответствующее положению элемента в меню. Для примера значение 1
соответствует первому элементу списка. Если вы хотите изменить выбор в коде, измените Value
свойство другому числу между 1
и количество элементов в меню.
Для примера можно использовать handles
структура в GUIDE для доступа к всплывающему меню и изменения Value
свойство:
set(handles.popupmenu1,'Value',2)
Первый аргумент, handles.popupmenu1
, может быть различным в коде, в зависимости от значения всплывающего меню Tag
свойство.
Этот код является примером функции обратного вызова всплывающего меню в GUIDE. Связать эту функцию с всплывающим меню Callback
свойство для выполнения, когда конечный пользователь выбирает элемент из меню.
function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns contents... % contents{get(hObject,'Value')} returns selected item... items = get(hObject,'String'); index_selected = get(hObject,'Value'); item_selected = items{index_selected}; display(item_selected);
Когда пользователь выбирает элемент во всплывающем меню, функция обратного вызова выполняет следующие задачи:
Получает все элементы во всплывающем меню и сохраняет их в переменной, items
.
Получает числовой индекс выбранного элемента и сохраняет его в переменной, index_selected
.
Получает значение выбранного элемента и сохраняет его в переменной, item_selected
.
Отображение выбранного элемента в Командном окне MATLAB.
Можно создать функцию обратного вызова, которая выполняется при щелчке правой или левой кнопкой мыши конечного пользователя на панели. Если вы работаете в GUIDE, щелкните правой кнопкой по панели в размещении и выберите View Callbacks > ButtonDownFcn, чтобы создать функцию обратного вызова.
Этот код является примером ButtonDownFcn
коллбэк в GUIDE.
function uipanel1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to uipanel1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Mouse button was pressed');
'Mouse button was pressed'
, в Командном окне.По умолчанию, GUIDE, UIs не может быть изменен, но Вы можете отвергнуть это поведение, выбрав Tools> GUI Options и установив Resize behavior к Proportional.
Когда окно пользовательского интерфейса может быть изменено, положение компонентов в окне корректируется, когда пользователь изменяет его размер. Если у вас есть панель в пользовательском интерфейсе, то размер панели изменится с размером окна. Используйте SizeChangedFcn
панели коллбэк, чтобы приложение выполняло определенные задачи при изменении размера панели.
Этот код является примером SizeChangedFcn
панели коллбэк в приложении GUIDE. Когда пользователь изменяет размер окна, эта функция изменяет размер шрифта статического текста внутри панели.
function uipanel1_SizeChangedFcn(hObject, eventdata, handles) % hObject handle to uipanel1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(hObject,'Units','Points') panelSizePts = get(hObject,'Position'); panelHeight = panelSizePts(4); set(hObject,'Units','normalized'); newFontSize = 10 * panelHeight / 115; texth = findobj('Tag','text1'); set(texth,'FontSize',newFontSize);
Если ваш пользовательский интерфейс содержит вложенные панели, они изменяются с внутреннего размера (в порядке «дочерний элемент - родитель»).
Примечание
Чтобы текст внутри панели изменялся автоматически, установите fontUnits
свойство к 'normalized'
.
Группы кнопок аналогичны панелям, но они также управляют эксклюзивным выбором переключателей и кнопок-переключателей. Когда группа кнопок содержит несколько переключателей или кнопки-переключатели, группа кнопок позволяет конечному пользователю выбрать только одну из них.
Не кодируйте коллбэки для отдельных кнопок, находящихся внутри группы кнопок. Вместо этого используйте SelectionChangedFcn
группы кнопок коллбэк, чтобы ответить, когда конечный пользователь выбирает кнопку.
Этот код является примером группы кнопок SelectionChangedFcn
Коллбэк, который управляет двумя переключателями и две кнопок-переключателей.
function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles) % hObject handle to the selected object in uibuttongroup1 % eventdata structure with the following fields % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) switch get(eventdata.NewValue,'Tag') % Get Tag of selected object. case 'radiobutton1' display('Radio button 1'); case 'radiobutton2' display('Radio button 2'); case 'togglebutton1' display('Toggle button 1'); case 'togglebutton2' display('Toggle button 2'); end
Когда конечный пользователь выбирает переключатель или кнопку-переключатель в группе кнопок, эта функция определяет, какую кнопку пользователь выбирает на основе Tag
кнопки свойство. Затем он выполняет код внутри соответствующего
case
.
Примечание
Группа кнопок SelectedObject
свойство содержит указатель на кнопку, выбранную пользователем. Вы можете использовать это свойство в другом месте вашего кода, чтобы определить, какую кнопку выбрал пользователь.
Код в этом разделе содержит пример функций обратного вызова, которые отвечают, когда конечный пользователь выбирает Edit > Copy > To File в этом меню.
% -------------------------------------------------------------------- function edit_menu_Callback(hObject, eventdata, handles) % hObject handle to edit_menu (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Edit menu selected'); % -------------------------------------------------------------------- function copy_menu_item_Callback(hObject, eventdata, handles) % hObject handle to copy_menu_item (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Copy menu item selected'); % -------------------------------------------------------------------- function tofile_menu_item_Callback(hObject, eventdata, handles) % hObject handle to tofile_menu_item (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,path] = uiputfile('myfile.m','Save file name');
Функции обратного вызова запускаются в ответ на эти действия:
Когда конечный пользователь выбирает меню Edit, edit_menu_Callback
функция отображает текст, 'Edit menu selected'
, в Командном Окне MATLAB.
Когда конечный пользователь наведет указатель мыши на Copy элемент меню, copy_menu_item_Callback
функция отображает текст, 'Copy menu item selected'
, в Командном Окне MATLAB.
Когда конечный пользователь нажимает и отпускает кнопку мыши в To File элементе меню, tofile_menu_item_Callback
функция отображает диалоговое окно, в котором конечному пользователю предлагается выбрать папку назначения и имя файла.
The tofile_menu_item_Callback
функция вызывает uiputfile
функция, предлагающая конечному пользователю указать файл назначения и папку. Если вы хотите создать элемент меню, который запрашивает пользователя для существующего файла, например, если ваш пользовательский интерфейс имеет элемент меню Open File, используйте uigetfile
функция.
Когда вы создаете каскадное меню, подобное этому, промежуточные элементы меню запускаются, когда мышь зависает над ними. Конечное, оконечное, меню элемента запускается, когда кнопка мыши релизов по элементу меню.
Вы можете добавить флажок рядом с элементом меню, чтобы указать, что опция включена. В GUIDE можно выбрать пункт Проверить этот пункт в редакторе меню, чтобы сделать элемент меню проверенным по умолчанию. Каждый раз, когда конечный пользователь выбирает элемент меню, функция обратного вызова может включать или выключать проверку.
Этот код показывает, как изменить флажок рядом с элементом меню.
if strcmp(get(hObject,'Checked'),'on') set(hObject,'Checked','off'); else set(hObject,'Checked','on'); end
strcmp
функция сравнивает два векторов символов и возвращает true
когда они совпадают. В этом случае возвращается true
когда элемент меню Checked
свойство соответствует вектору символов, 'on'
.
Дополнительные сведения о создании элементов меню в GUIDE см. в разделе Создание меню для приложений GUIDE.
Этот код является примером функции обратного вызова таблицы, CellSelectionCallback
. Связать эту функцию с таблицей CellSelectionCallback
свойство для выполнения, когда конечный пользователь выбирает камеры в таблице.
function uitable1_CellSelectionCallback(hObject, eventdata, handles) % hObject handle to uitable1 (see GCBO) % eventdata structure with the following fields % Indices: row and column indices of the cell(s) currently selected % handles structure with handles and user data (see GUIDATA) data = get(hObject,'Data'); indices = eventdata.Indices; r = indices(:,1); c = indices(:,2); linear_index = sub2ind(size(data),r,c); selected_vals = data(linear_index); selection_sum = sum(sum(selected_vals))
Когда конечный пользователь выбирает камеры в таблице, эта функция выполняет следующие задачи:
Получает все значения в таблице и сохраняет их в переменной, data
.
Получение индексов выбранных камер. Эти индексы соответствуют строкам и столбцам в data
.
Преобразует индексы строка и столбец в линейные индексы. Линейные индексы позволяют вам выбрать несколько элементов массива с помощью одной команды.
Получает значения, выбранные конечным пользователем, и сохраняет их в переменной, selected_vals
.
Суммирует все выбранные значения и отображает результат в Командном окне.
Этот код является примером функции обратного вызова таблицы, CellEditCallback
. Связать эту функцию с таблицей CellEditCallback
свойство для выполнения при редактировании камеры в таблице конечным пользователем.
function uitable1_CellEditCallback(hObject, eventdata, handles) % hObject handle to uitable1 (see GCBO) % eventdata structure with the following fields % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. % Empty if Data was not changed % Error: error string when failed to convert EditData data = get(hObject,'Data'); data_sum = sum(sum(data))
ColumnEditable
свойство должно быть установлено в true
по крайней мере, в одном столбце, чтобы позволить конечному пользователю редактировать камеры в таблице.Код в этом разделе является примером осей ButtonDownFcn
который запускается, когда конечный пользователь кликает по осям.
function axes1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to axes1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) pt = get(hObject,'CurrentPoint')
Примечание
Большинство функций построения графика MATLAB очищают оси и сбрасывают ряд свойств осей, включая ButtonDownFcn
, перед построением графика данных. Чтобы создать интерфейс, который позволяет конечному пользователю отображать данные в интерактивном режиме, рассмотрите предоставление компонента, такого как кнопка для управления графическим изображением. На свойства таких компонентов не влияют функции построения графика. Если необходимо использовать оси ButtonDownFcn
для построения графика данных, затем используйте такие функции, как line
, patch
, и surface
.