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