Кодирование поведения компонента пользовательского интерфейса включает определенные задачи, которые уникальны для типа компонента, с которым вы работаете. Эта тема содержит простые примеры коллбэков для каждого типа компонента. Примеры записаны для GUIDE, если не указано иное. Для получения общей информации о кодировании коллбэков, смотрите Запись обратных вызовов в GUIDE или Запись обратных вызово для приложений, созданных программно.
Если вы работаете в GUIDE, то щелкните правой кнопкой по компоненту в своем размещении и выберите соответствующее свойство коллбэка из меню View Callbacks. Выполнение так создает пустую функцию обратного вызова, которая автоматически сопоставлена с компонентом. Определенное имя функции, которое создает GUIDE, основано на свойстве Tag
компонента, таким образом, ваше имя функции может немного отличаться, чем имя функции в примере кода. Не меняйте имя функции, которое GUIDE создает в вашем коде. Чтобы использовать пример кода в вашем приложении, скопируйте код с тела функции примера в тело вашей функции.
Если вы создаете приложение программно, (без GUIDE), то можно адаптировать пример кода в код. Чтобы адаптировать пример в ваш код, не используйте третий входной параметр, handles
, из функционального определения. Кроме того, замените любые ссылки на массив handles
с соответствующим указателем на объект. Чтобы сопоставить функцию обратного вызова с компонентом, установите свойство коллбэка компонента быть указателем на функцию обратного вызова. Например, эта команда создает компонент кнопки и устанавливает свойство Callback
быть указателем на функцию, pushbutton1_callback
.
свинец = uicontrol ('Стиль', 'кнопка', 'Callback',@pushbutton1_Callback);
Этот код является примером функции обратного вызова кнопки в 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
, когда кнопка-переключатель произошла. 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
, когда переключатель не устанавливается. 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
, когда флажок не устанавливается. 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'})
, заполняет содержимое поля списка.Если вы разрабатываете приложение программно (без GUIDE), то заполняете поле списка, когда вы создаете его. Например:
function myui() figure uicontrol('Style','Listbox',... 'String',{'Red';'Green';'Blue'},... 'Position',[40 70 80 50]); end
Когда конечный пользователь выбирает элемент поля списка, изменения свойства 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'})
, заполняет содержимое всплывающего меню.Если вы разрабатываете приложение программно (без GUIDE), то заполняете всплывающее меню, когда вы создаете его. Например:
function myui() figure uicontrol('Style','popupmenu',... 'String',{'Red';'Green';'Blue'},... 'Position',[40 70 80 20]); end
Когда конечный пользователь выбирает элемент, изменения свойства 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 UI не могут быть изменены, но можно заменить это поведение путем выбора Tools> GUI Options и установка Resize behavior к Proportional.
Программируемый UIs может быть изменен по умолчанию, и можно изменить это поведение путем установки свойства Resize
фигуры по или прочь.
Когда окно UI изменяемого размера, положение компонентов в окне настраивают, когда пользователь изменяет размер его. Если у вас будет панель в вашем пользовательском интерфейсе, то размер панели изменится с размером окна. Используйте коллбэк 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, the copy_menu_item_Callback
функция отображает текст, 'Copy menu item selected'
, в Окне Команды MATLAB.
Когда конечный пользователь кликает и отпускает кнопку мыши на пункте меню To File, функция tofile_menu_item_Callback
отображает диалоговое окно, которое предлагает конечному пользователю выбирать папку назначения и имя файла.
Вызовы функции 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
по крайней мере в одном столбце позволить конечному пользователю редактировать ячейки в таблице. Для получения дополнительной информации о составлении таблиц и изменении их свойств в GUIDE, смотрите, Добавляют Компоненты к области Компоновки GUIDE.Код в этом разделе является примером оси 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
.