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

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

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

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

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

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

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

ButtonDownFcn

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

axes, figure, uibuttongroup, uicontrol, uipanel, uitable,

Callback

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

uicontextmenu, uicontrol, uimenu

CellEditCallback

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

uitable

CellSelectionCallback

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

uitable

ClickedCallback

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

uitoggletool, uipushtool

CloseRequestFcn

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

figure

CreateFcn

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

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

DeleteFcn

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

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

KeyPressFcn

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

figure, uicontrol, uipanel, uipushtool, uitable, uitoolbar

KeyReleaseFcn

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

figure, uicontrol, uitable

OffCallback

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

uitoggletool

OnCallback

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

uitoggletool

SizeChangedFcn

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

figure, uipanel, uibuttongroup

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
KeyPressFcnfigure, uicontrol, uitable
KeyReleaseFcnfigure, uicontrol, uitable
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, это остается необнаруженным, пока пользователь не инициировал коллбэк.

Похожие темы