Пользовательский интерфейс и графические компоненты имеют определенные свойства, которые можно сопоставить с определенными функциями обратного вызова. Каждое из этих свойств соответствует определенному пользовательскому действию. Например, uicontrol имеет свойство под названием Callback
. Можно установить значение этого свойства быть указателем на функцию обратного вызова, анонимную функцию или вектор символа, содержащий выражение MATLAB®. Установка этого свойства заставляет ваше приложение ответить, когда пользователь взаимодействует с uicontrol. Если свойство Callback
не имеет никакого заданного значения, то ничего не происходит, когда пользователь взаимодействует с uicontrol.
Эта таблица приводит свойства обратного вызова, которые доступны, пользовательские действия, которые инициировали функцию обратного вызова, и наиболее распространенный пользовательский интерфейс и графические компоненты, которые используют их.
Свойство обратного вызова | Пользовательское действие | Компоненты, которые используют это свойство |
---|---|---|
'ButtonDownFcn' | Конечный пользователь нажимает кнопку мыши, в то время как указатель находится на компоненте или фигуре. | |
'callback' | Конечный пользователь инициировал компонент. Например: выбор пункта меню, перемещение ползунка или нажатие кнопки. | |
CellEditCallback | Конечный пользователь редактирует значение в таблице, ячейки которой доступны для редактирования. | |
CellSelectionCallback | Конечный пользователь выбирает ячейки в таблице. | |
ClickedCallback | Конечный пользователь кликает по инструменту инструмента или переключателя нажатия с левой кнопкой мыши. | |
CloseRequestFcn | Завершения фигуры. | |
CreateFcn | Обратный вызов выполняется, когда MATLAB создает объект, но прежде чем это будет отображено. |
|
DeleteFcn | Обратный вызов выполняется непосредственно перед тем, как MATLAB удаляет фигуру. |
|
KeyPressFcn | Конечный пользователь нажимает клавишу на клавиатуре, в то время как указатель находится на объекте. | |
| Конечный пользователь выпускает клавишу на клавиатуре, в то время как указатель находится на объекте. | |
OffCallback | Выполняется, когда | |
OnCallback | Выполняется, когда | |
| Конечный пользователь изменяет размер группы кнопок, фигуры или панели, свойством | |
'SelectionChangedFcn' | Конечный пользователь устанавливает различный переключатель или кнопку-переключатель в группе кнопок. | |
WindowButtonDownFcn | Конечный пользователь нажимает кнопку мыши, в то время как указатель находится в окне фигуры. | |
WindowButtonMotionFcn | Конечный пользователь перемещает указатель в рамках окна фигуры. | |
WindowButtonUpFcn | Конечный пользователь отпускает кнопку мыши. | |
WindowKeyPressFcn | Конечный пользователь нажимает клавишу, в то время как указатель находится на фигуре или любом из его дочерних объектов. | |
WindowKeyReleaseFcn | Конечный пользователь отпускает клавишу, в то время как указатель находится на фигуре или любом из его дочерних объектов. | |
| Конечный пользователь крутит колесо мыши, в то время как указатель находится на фигуре. |
Чтобы сопоставить функцию обратного вызова с компонентом UI, установите значение одного из свойств обратного вызова компонента быть ссылкой на функцию обратного вызова. Как правило, вы делаете это, когда вы задаете компонент, но можно изменить значения свойств обратного вызова где угодно в коде.
Задайте значение свойства обратного вызова одним из следующих способов:
Определение массива ячеек. Этот массив ячеек содержит указатель на функцию как первый элемент, сопровождаемый и любые входные параметры, которые вы хотите использовать в функции.
Определение вектора символа, содержащего Команды MATLAB (не рекомендуемый)
Указатели на функцию обеспечивают способ представлять функцию как переменную. Функция должна быть локальной или вложенной функцией в том же файле как код приложения, или можно написать его в отдельном файле, который находится на пути MATLAB.
Чтобы создать указатель на функцию, задайте оператор @
перед именем функции. Например, эта команда uicontrol
задает свойство Callback
быть указателем на функциональный pushbutton_callback
:
b = uicontrol('Style','pushbutton','Callback',@pushbutton_callback);
Вот функциональное определение для pushbutton_callback
:
function pushbutton_callback(src,event) display('Button pressed'); end
Имя свойства обратного вызова | Компонент |
---|---|
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, которые могут включать аргументы в функции. Например:
hb = uicontrol('Style','pushbutton',... 'String','Plot line',... 'Callback','plot(rand(20,3))');
'plot(rand(20,3))'
, является допустимой командой, и MATLAB оценивает его, когда пользователь нажимает кнопку. Если вектор символа включает переменную, например,'plot(x)'
x
должен существовать в базовом рабочем пространстве, когда пользователь инициировал обратный вызов, или это возвращает ошибку. Переменная не должна существовать в то время, когда вы присваиваете значение свойства обратного вызова, но это должно существовать, когда пользователь инициировал обратный вызов.В отличие от обратных вызовов, которые заданы как указатели на функцию или массивы ячеек, MATLAB не делает векторов контрольного символа для синтаксических ошибок или недостающих зависимостей. Если существует проблема с выражением MATLAB, это остается необнаруженным, пока пользователь не инициировал обратный вызов.