Запись обратных вызово для приложений, созданных программно

Обратные вызовы для различных пользовательских действий

Пользовательский интерфейс и графические компоненты имеют определенные свойства, которые можно сопоставить с определенными функциями обратного вызова. Каждое из этих свойств соответствует определенному пользовательскому действию. Например, uicontrol имеет свойство под названием Callback. Можно установить значение этого свойства быть указателем на функцию обратного вызова, анонимную функцию или вектор символов, содержащий выражение MATLAB®. Установка этого свойства заставляет ваше приложение ответить, когда пользователь взаимодействует с uicontrol. Если Callback свойство не имеет никакого заданного значения, затем ничего не происходит, когда пользователь взаимодействует с uicontrol.

Эта таблица приводит свойства коллбэка, которые доступны, пользовательские действия, которые инициировали функцию обратного вызова, и наиболее распространенный пользовательский интерфейс и графические компоненты, которые используют их.

Свойство коллбэка

Пользовательское действие

Компоненты, которые используют это свойство

ButtonDownFcn

Конечный пользователь нажимает кнопку мыши, в то время как указатель находится на компоненте или фигуре.

axesфигураuibuttongroupuicontroluipaneluitable,

Callback

Конечный пользователь инициировал компонент. Например: выбор пункта меню, перемещение ползунка или нажатие кнопки.

uicontextmenuuicontroluimenu

CellEditCallback

Конечный пользователь редактирует значение в таблице, ячейки которой доступны для редактирования.

uitable

CellSelectionCallback

Конечный пользователь выбирает ячейки в таблице.

uitable

ClickedCallback

Конечный пользователь кликает по инструменту инструмента или переключателя нажатия с левой кнопкой мыши.

uitoggletooluipushtool

CloseRequestFcn

Завершения фигуры.

figure

CreateFcn

Коллбэк выполняется, когда MATLAB создает объект, но прежде чем это будет отображено.

axesфигураuibuttongroupUIContextMenu uicontroluimenuuipushtooluipaneluitableuitoggletooluitoolbar

DeleteFcn

Коллбэк выполняется непосредственно перед тем, как MATLAB удаляет фигуру.

axesфигураuibuttongroupUIContextMenu uicontroluimenuuipushtooluipaneluitableuitoggletooluitoolbar

KeyPressFcn

Конечный пользователь нажимает клавишу на клавиатуре, в то время как указатель находится на объекте.

figureuicontroluipaneluipushtooluitableuitoolbar

KeyReleaseFcn

Конечный пользователь выпускает клавишу на клавиатуре, в то время как указатель находится на объекте.

figureuicontroluitable

OffCallback

Выполняется когда State из переключателя инструмент превращается в 'off'.

uitoggletool

OnCallback

Выполняется когда State из переключателя инструмент превращается в 'on'.

uitoggletool

SizeChangedFcn

Конечный пользователь изменяет размер группы кнопок, фигуры или панели чей Resize свойством является 'on'.

figureuipaneluibuttongroup

SelectionChangedFcn

Конечный пользователь устанавливает различный переключатель или кнопку-переключатель в группе кнопок.

uibuttongroup

WindowButtonDownFcn

Конечный пользователь нажимает кнопку мыши, в то время как указатель находится в окне рисунка.

figure

WindowButtonMotionFcn

Конечный пользователь перемещает указатель в рамках окна рисунка.

figure

WindowButtonUpFcn

Конечный пользователь отпускает кнопку мыши.

figure

WindowKeyPressFcn

Конечный пользователь нажимает клавишу, в то время как указатель находится на фигуре или любом из его дочерних объектов.

figure

WindowKeyReleaseFcn

Конечный пользователь отпускает клавишу, в то время как указатель находится на фигуре или любом из его дочерних объектов.

figure

WindowScrollWheelFcn

Конечный пользователь крутит колесо мыши, в то время как указатель находится на фигуре.

figure

Как задать значения свойств обратного вызова

Чтобы сопоставить функцию обратного вызова с компонентом пользовательского интерфейса, установите значение одного из свойств коллбэка компонента быть ссылкой на функцию обратного вызова. Как правило, вы делаете это, когда вы задаете компонент, но можно изменить значения свойств коллбэка где угодно в коде.

Задайте значение свойства коллбэка одним из следующих способов:

Определение указателя на функцию

Указатели на функцию обеспечивают способ представлять функцию как переменную. Функция должна быть локальной или вложенной функцией в том же файле как код приложения, или можно написать его в отдельном файле, который находится на пути MATLAB.

Чтобы создать указатель на функцию, задайте @ оператор перед именем функции. Например, этот uicontrol команда задает Callback свойство быть указателем на функциональный pushbutton_callback:

b = uicontrol('Style','pushbutton','Callback',@pushbutton_callback);

Вот функциональное определение для pushbutton_callback:

function pushbutton_callback(src,event)
   display('Button pressed');
end
Заметьте, что указатель на функцию явным образом не относится ни к каким входным параметрам, но объявление функции включает два входных параметра. Эти два входных параметра требуются для всех коллбэков, вы определяете функцией указатель. MATLAB передает эти аргументы автоматически, когда коллбэк выполняется. Первый аргумент является компонентом пользовательского интерфейса, который инициировал коллбэк. Второй аргумент предоставляет данные о событиях функции обратного вызова. Если нет никаких данных о событиях, доступных для функции обратного вызова, то MATLAB передает второй входной параметр как пустой массив. В следующей таблице перечислены коллбэки и компоненты те данные о событиях использования.

Имя свойства коллбэкаКомпонент
WindowKeyPressFcn
WindowKeyReleaseFcn
WindowScrollWheel
figure
KeyPressFcnfigureuicontroluitable
KeyReleaseFcnfigureuicontroluitable
SelectionChangedFcnuibuttongroup
CellEditCallback
CellSelectionCallback
uitable

Преимущество определения коллбэков как указатели на функцию - то, что MATLAB проверяет функцию на синтаксические ошибки и недостающие зависимости, когда вы присваиваете коллбэк компоненту. Если существует проблема в функции обратного вызова, то MATLAB сразу возвращает ошибку вместо того, чтобы ожидать пользователя, чтобы инициировать коллбэк. Это поведение помогает вам найти проблемы в своем коде, прежде чем пользователь столкнется с ними.

Определение массива ячеек

Используйте массив ячеек, чтобы задать функцию обратного вызова, которая принимает дополнительные входные параметры, которые вы хотите использовать в функции. Первым элементом в массиве ячеек является указатель на функцию. Другими элементами в массиве ячеек являются дополнительные входные параметры, которые вы хотите использовать, разделенный запятыми. Функция, которую вы задаете, должна задать те же два входных параметра как описано в, Задают Указатель на функцию. Однако можно задать дополнительные входные параметры в объявлении функции после первых двух аргументов.

Этот uicontrol команда создает кнопку и задает Callback свойство быть массивом ячеек. В этом случае именем функции является pushbutton_callback, и значением дополнительного входного параметра является 5.

b = uicontrol('Style','pushbutton','Callback',{@pushbutton_callback,5});

Вот функциональное определение для pushbutton_callback:

function pushbutton_callback(src,event,x)
   display(x);
end

Как коллбэки, заданные как указатели на функцию, MATLAB проверяет коллбэки, заданные как массивы ячеек для синтаксических ошибок и недостающих зависимостей, когда вы присваиваете коллбэк компоненту. Если существует проблема в функции обратного вызова, то MATLAB сразу возвращает ошибку вместо того, чтобы ожидать пользователя, чтобы инициировать коллбэк. Это поведение помогает вам найти проблемы в своем коде, прежде чем пользователь столкнется с ними.

Определение анонимной функции

Задайте анонимную функцию, когда это необходимо, компонент пользовательского интерфейса, чтобы выполнить функцию, которая не поддерживает два аргумента, которые требуются для указателей на функцию и массивов ячеек. Например, этот uicontrol команда создает кнопку и задает Callback свойство быть анонимной функцией. В этом случае именем функции является myfun, и его объявление функции задает только один входной параметр, x.

b = uicontrol('Style','pushbutton','Callback',@(src,event)myfun(x));

Определение вектора символа, содержащего Команды MATLAB (не рекомендуемый)

Можно задать вектор символов, когда это необходимо, чтобы выполнить несколько простых команд, но коллбэк может стать трудным справиться, если он содержит больше, чем несколько команд. Вектор символов, который вы задаете, должен состоять из допустимых выражений MATLAB, которые могут включать аргументы в функции. Например:

hb = uicontrol('Style','pushbutton',...
               'String','Plot line',...
               'Callback','plot(rand(20,3))');
Вектор символов, 'plot(rand(20,3))', допустимая команда, и MATLAB выполняет ее, когда пользователь нажимает кнопку. Если вектор символов включает переменную, например,
'plot(x)'
Переменная x должен существовать в базовом рабочем пространстве, когда пользователь инициировал коллбэк, или это возвращает ошибку. Переменная не должна существовать в то время, когда вы присваиваете значение свойства коллбэка, но это должно существовать, когда пользователь инициировал коллбэк.

В отличие от коллбэков, которые заданы как указатели на функцию или массивы ячеек, MATLAB не делает векторов контрольного символа для синтаксических ошибок или недостающих зависимостей. Если существует проблема с выражением MATLAB, это остается необнаруженным, пока пользователь не инициировал коллбэк.

Похожие темы