Коллбэки для конкретных компонентов

Примечание

Окружение 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))
Когда конечный пользователь завершает редактирование камеры таблицы, эта функция получает все значения в таблице и вычисляет сумму всех значений таблицы. The 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, когда конечный пользователь кликает по осям (но не когда этот пользователь кликает по другому графическому объекту, сопоставленному с осями).

Примечание

Большинство функций построения графика MATLAB очищают оси и сбрасывают ряд свойств осей, включая ButtonDownFcn, перед построением графика данных. Чтобы создать интерфейс, который позволяет конечному пользователю отображать данные в интерактивном режиме, рассмотрите предоставление компонента, такого как кнопка для управления графическим изображением. На свойства таких компонентов не влияют функции построения графика. Если необходимо использовать оси ButtonDownFcn для построения графика данных, затем используйте такие функции, как line, patch, и surface.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте