Пользовательский интерфейс и графические компоненты имеют определенные свойства, которые можно связать с определенными функциями обратного вызова. Каждое из этих свойств соответствует определенному пользовательскому действию. Например, uicontrol имеет свойство, называемое Callback
. Можно задать значение этого свойства как handle для функции обратного вызова, анонимной функции или вектора символов, содержащей MATLAB® выражение. Установка этого свойства заставляет ваше приложение реагировать при взаимодействии пользователя с uicontrol. Если на Callback
свойство не имеет заданного значения, тогда ничего не происходит при взаимодействии пользователя с uicontrol.
В этой таблице перечислены свойства коллбэка, которые доступны, действия пользователя, которые запускают функцию обратного вызова, и наиболее распространенные UI и графические компоненты, которые их используют.
Свойство коллбэка | Действие пользователя | Компоненты, которые используют это свойство |
---|---|---|
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 возвращает ошибку немедленно, а не ждет, когда пользователь вызовет коллбэк. Это поведение помогает вам найти проблемы в коде, прежде чем пользователь столкнется с ними.
Используйте массив ячеек, чтобы задать функцию обратного вызова, которая принимает дополнительные входные параметры, которые вы хотите использовать в функции. Первый элемент массива ячеек является указателем на функцию. Другие элементы массива ячеек являются дополнительными входными параметрами, которые вы хотите использовать, разделенными запятыми. Функция, которую вы задаете, должна задать те же два входных параметров, как описано в Specify a Указатель на Функцию. Однако можно задать дополнительные входы в объявлении функции после первых двух аргументов.
Это 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, он остается незамеченным, пока пользователь не запустит коллбэк.