Чтобы программировать компонент пользовательского интерфейса в вашем приложении, чтобы ответить на вход пользователя приложения, создайте callback function для того компонента пользовательского интерфейса. Функция обратного вызова является функцией, которая выполняется в ответ на взаимодействие с пользователем, такое как нажатие кнопки на кнопке. Каждый компонент пользовательского интерфейса имеет несколько callback properties, каждый из которых соответствует определенному действию. Когда пользователь запускает ваше приложение и выполняет одно из этих действий, MATLAB® выполняет функцию, присвоенную связанному свойству коллбэка.
Например, если ваше приложение содержит кнопку, вы можете хотеть сделать обновление приложения, когда пользователь нажимает ту кнопку. Можно сделать это путем записи функции, которая выполняет обновление, затем устанавливая ButtonPushedFcn
свойство кнопки к указателю на вашу функцию. Можно присвоить функцию обратного вызова свойству коллбэка в качестве аргумента значения имени, когда вы создаете компонент, или можно установить свойство с помощью записи через точку отовсюду в коде.
Чтобы определить свойства коллбэка, компонент пользовательского интерфейса имеет, смотрите страницу свойств определенного компонента пользовательского интерфейса.
Когда компонент пользовательского интерфейса выполняет функцию обратного вызова, MATLAB автоматически передает два входных параметра функции. Эти входные параметры часто называют src
и event
. Первый аргумент является компонентом пользовательского интерфейса, который инициировал коллбэк. Второй аргумент предоставляет данные о событиях функции обратного вызова. Данные о событиях, которые это обеспечивает, характерны для свойства коллбэка и типа компонента. Чтобы определить данные о событиях, сопоставленные со свойством коллбэка, смотрите страницу свойств компонента пользовательского интерфейса, который выполняет коллбэк.
Например, updateDropDown
функционируйте использует эти входные параметры коллбэка, чтобы добавить элементы в доступное для редактирования выпадающее меню, когда пользователь вводит новое значение. Когда выпадающее выполняет addItems
коллбэк, src
содержит выпадающий компонент и event
содержит информацию о взаимодействии. Функция использует event.Edited
свойство проверять, является ли значение новым значением, которое пользователь ввел, или существующий элемент. Затем если значение является новым, функция использует event.Value
свойство добавить значение в выпадающие элементы.
Чтобы запустить эту функцию, сохраните его в файл с именем updateDropDown.m
на пути MATLAB. Введите новое значение в выпадающем меню, нажмите Enter и просмотрите обновленные выпадающие элементы.
function updateDropDown fig = uifigure('Position',[500 500 300 200]); dd = uidropdown(fig, ... 'Editable','on', ... 'Items',{'Red','Green','Blue'}, ... 'ValueChangedFcn',@addItems); end function addItems(src,event) val = event.Value; if event.Edited src.Items{end+1} = val; end end
Присвойте функцию обратного вызова свойству коллбэка одним из следующих способов:
Задайте Указатель на функцию — Использование этот метод, когда ваш коллбэк не потребует дополнительных входных параметров.
Задайте Массив ячеек — Использование этот метод, когда ваш коллбэк потребует дополнительных входных параметров. Массив ячеек содержит указатель на функцию как первый элемент, сопровождаемый любыми входными параметрами, которые вы хотите использовать в функции.
Задайте Анонимную функцию — Использование этот метод, когда ваш код коллбэка прост, или снова использовать функцию, которая не всегда выполняется как коллбэк.
Указатели на функцию обеспечивают способ представлять функцию как переменную. Функция может быть или локальной или вложенной функцией в том же файле как код приложения или функция, определяемая в отдельном файле, который находится на пути MATLAB. Чтобы создать указатель на функцию, задайте @
оператор перед именем функции.
Например, чтобы создать кнопку, которая отвечает на нажатие кнопки, сохраните следующую функцию в файл с именем codeButtonResponse.m
на пути MATLAB. Этот код создает кнопку с помощью uibutton
функция и наборы ButtonPushedFcn
свойство быть указателем на функциональный buttonCallback
. Это создает этот указатель с помощью обозначения @buttonCallback
. Заметьте, что указатель на функцию явным образом не относится ни к каким входным параметрам, но объявление функции включает src
и event
входные параметры.
function codeButtonResponse fig = uifigure('Position',[500 500 300 200]); btn = uibutton(fig,'ButtonPushedFcn',@buttonCallback); function buttonCallback(src,event) disp('Button pressed'); end end
Преимущество определения коллбэков как указатели на функцию - то, что MATLAB проверяет каждую функцию обратного вызова на синтаксические ошибки и недостающие зависимости, когда вы присваиваете его компоненту. Если существует проблема в функции обратного вызова, то MATLAB сразу возвращает ошибку вместо того, чтобы ожидать пользователя, чтобы инициировать коллбэк. Это поведение помогает вам найти проблемы в своем коде, прежде чем пользователь столкнется с ними.
Все коллбэки принимают два входных параметра для источника и события. Чтобы задать коллбэк, который принимает дополнительные входные параметры вне этих двух, используйте массив ячеек. Первым элементом в массиве ячеек является указатель на функцию. Другими элементами в массиве ячеек являются дополнительные входные параметры, которые вы хотите использовать, разделенный запятыми. Функция, которую вы задаете, должна принять источник и аргументы события, когда его первые два входных параметра, как описано в Задают Указатель на функцию. Однако можно задать дополнительные входные параметры в объявлении функции после этих первых двух аргументов.
Например, codeComponentResponse
функция создает кнопку и компонент флажка, которые оба используют ту же функцию в качестве коллбэка, но той передачи различные аргументы к ней. Чтобы задать различные входные параметры для различных компонентов, установите свойства коллбэка обоих компонентов к массивам ячеек. Первым элементом массива ячеек является указатель на componentCallback
функция и второе являются дополнительным входным параметром, чтобы передать функции.
Чтобы запустить этот пример, сохраните функцию в файл с именем codeComponentResponse.m
на пути MATLAB. Когда вы выбираете или снимаете флажок, MATLAB отображает You clicked the check box
. Когда вы нажимаете кнопку, MATLAB отображает You clicked the button
.
function codeComponentResponse fig = uifigure('Position',[500 500 300 200]); cbx = uicheckbox(fig,'Position',[100 125 84 22], ... 'ValueChangedFcn',{@componentCallback,'check box'}); btn = uibutton(fig,'Position',[100 75 84 22], ... 'ButtonPushedFcn',{@componentCallback,'button'}); function componentCallback(src,event,comp) disp(['You clicked the ' comp]); end end
Как коллбэки, заданные как указатели на функцию, MATLAB проверяет коллбэки, заданные как массивы ячеек для синтаксических ошибок и недостающих зависимостей, когда вы присваиваете их компоненту. Если существует проблема в функции обратного вызова, то MATLAB сразу возвращает ошибку вместо того, чтобы ожидать пользователя, чтобы инициировать коллбэк. Это поведение помогает вам найти проблемы в своем коде, прежде чем пользователь столкнется с ними.
Анонимная функция является функцией, которая не хранится в программном файле. Задайте анонимную функцию когда:
Вы хотите, чтобы компонент пользовательского интерфейса выполнил функцию, которая не поддерживает два источника и аргументы события, которые требуются для указателей на функцию и массивов ячеек.
Вы хотите, чтобы компонент пользовательского интерфейса выполнил скрипт.
Ваш коллбэк состоит из одного исполняемого оператора.
Чтобы задать анонимную функцию, создайте указатель на функцию с двумя требуемыми источниками и аргументами ввода событий, который выполняет вашу функцию обратного вызова, скрипт или оператор.
Например, changeSlider
функция создает ползунок компонент пользовательского интерфейса и кнопка, чтобы постепенно увеличить значение ползунка. incrementSlider
функция не имеет источника и аргументов ввода событий, поскольку это спроектировано, чтобы быть вызываемым любая внутренняя или внешняя часть коллбэка. Выполниться incrementSlider
когда кнопка нажимается, создайте анонимную функцию, которая принимает src
и event
входные параметры, игнорирует их и выполняется incrementSlider
.
Запускаться changeSlider
функция, сохраните код ниже в файл с именем changeSlider.m
на пути MATLAB.
function changeSlider fig = uifigure('Position',[500 500 300 200]); s = uislider(fig,'Position',[75 150 150 3]); incrementSlider; b = uibutton(fig,'Position',[100 50 100 22], ... 'Text','Increment', ... 'ButtonPushedFcn',@(src,event)incrementSlider); function incrementSlider if s.Value < s.Limits(2) s.Value = s.Value + 1; end end end
Когда ваш коллбэк является одним исполняемым оператором, можно задать коллбэк как анонимную функцию, чтобы не должными быть задать отдельную функцию для оператора. Например, следующий код создает кнопку, которая отображает Button pressed
когда кнопка нажата путем определения коллбэка как анонимной функции.
fig = uifigure('Position',[500 500 300 200]); btn = uibutton(fig,'ButtonPushedFcn',@(src,event)disp('Button pressed'));
В отличие от этого, с коллбэками, заданными как указатели на функцию или массивы ячеек, MATLAB не проверяет коллбэки, заданные как анонимные функции для синтаксических ошибок и недостающих зависимостей, когда вы присваиваете их компоненту. Если существует проблема с анонимной функцией, это остается необнаруженным, пока пользователь не инициировал коллбэк.
Можно задать коллбэк как вектор символов или строковый скаляр, когда это необходимо, чтобы выполнить несколько простых команд, но коллбэк может стать трудным справиться, если он содержит больше, чем несколько команд. В отличие от этого, с коллбэками, которые заданы как указатели на функцию или массивы ячеек, MATLAB не делает векторов контрольного символа или строк для синтаксических ошибок или недостающих зависимостей. Если существует проблема с выражением MATLAB, это остается необнаруженным, пока пользователь не инициировал коллбэк. Вектор символов или строка, которую вы задаете, должны состоять из допустимых выражений MATLAB, которые могут включать аргументы в функции.
Например, код ниже создает UIAxes
возразите и кнопка, которая отображает случайные данные на графике по осям, когда по ним кликают. Заметьте, что вектор символов 'plot(ax,rand(20,3))'
содержит переменную, ax
Переменная ax
должен существовать в базовом рабочем пространстве, когда пользователь инициировал коллбэк, или MATLAB возвращает ошибку. Переменная не должна существовать в то время, когда вы присваиваете значение свойства коллбэка, но это должно существовать, когда пользователь инициировал коллбэк.
Запустите код, затем нажмите кнопку. Начиная с ax
существует в вашем базовом рабочем пространстве, команда коллбэка допустима, и графики MATLAB данные.
fig = uifigure; ax = uiaxes(fig,'Position',[125 100 300 300]); b = uibutton(fig,'Position',[225 50 100 22], ... 'Text','Plot Data', ... 'ButtonPushedFcn','plot(ax,rand(20,3))');