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

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

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

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

фигура

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

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

фигура

WindowButtonMotionFcn

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

фигура

WindowButtonUpFcn

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

фигура

WindowKeyPressFcn

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

фигура

WindowKeyReleaseFcn

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

фигура

WindowScrollWheelFcn

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

фигура

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

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

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

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

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

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

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

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

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

Имя свойства обратного вызоваКомпонент
WindowKeyPressFcn
WindowKeyReleaseFcn
WindowScrollWheel
фигура
KeyPressFcn figure, uicontrol, uitable
KeyReleaseFcn figure, uicontrol, uitable
'SelectionChangedFcn' uibuttongroup
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 сразу возвращает ошибку вместо того, чтобы ожидать пользователя, чтобы инициировать обратный вызов. Это поведение помогает вам найти проблемы в своем коде, прежде чем пользователь столкнется с ними.

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

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

Похожие темы

Была ли эта тема полезной?