Обратные вызовы для определенных компонентов

Примечание

Среда GUIDE будет удалена в будущем релизе. После того, как GUIDE удален, существующие приложения GUIDE продолжат запускаться в MATLAB® но они не будут доступны для редактирования в GUIDE.

Чтобы продолжить редактировать существующее приложение GUIDE, см. Стратегии Миграции GUIDE информации о том, как помочь обеспечить совместимость приложения с будущими релизами 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 свойство, когда кнопка-переключатель произошла. 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'}), заполняет содержимое поля списка.

Изменение выбранного пункта

Когда конечный пользователь выбирает элемент поля списка, 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 UI не могут быть изменены, но можно заменить это поведение путем выбора Tools> GUI Options и установка Resize behavior к Proportional.

Когда окно 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 по крайней мере в одном столбце, чтобы позволить конечному пользователю редактировать ячейки в таблице.

Оси

Код в этом разделе является примером оси 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.

Похожие темы