Запись обратных вызовов в GUIDE

Примечание

Среда GUIDE будет удалена в будущем релизе. После того, как GUIDE удален, существующие приложения GUIDE продолжат запускаться в MATLAB®, но они не будут доступны для редактирования в GUIDE.

Чтобы продолжить редактировать существующее приложение GUIDE, см. Стратегии Миграции GUIDE информации о том, как помочь обеспечить совместимость приложения с будущими релизами MATLAB. Чтобы создать новые приложения в интерактивном режиме, Разработайте Приложения Используя App Designer вместо этого.

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

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

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

figure

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

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

figure

WindowButtonMotionFcn

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

figure

WindowButtonUpFcn

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

figure

WindowKeyPressFcn

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

figure

WindowKeyReleaseFcn

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

figure

WindowScrollWheelFcn

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

figure

Сгенерированные GUIDE функции обратного вызова и значения свойств

Как GUIDE управляет функциями обратного вызова и свойствами

После того, как вы добавляете a uicontrol, uimenu, или uicontextmenu компонент к вашему пользовательскому интерфейсу, но прежде чем вы сохраните его, GUIDE, заполняет Callback свойство со значением, %automatic. Это значение указывает, что GUIDE сгенерирует имя для функции обратного вызова.

Когда вы сохраняете свой пользовательский интерфейс, GUIDE добавляет пустое определение функции обратного вызова вашему файлу кода, и это устанавливает Callback управления свойство быть анонимной функцией. Этим функциональным определением является пример сгенерированной GUIDE функции обратного вызова для кнопки.

function pushbutton1_Callback(hObject,eventdata,handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

end
Если вы сохраняете этот пользовательский интерфейс с именем, myui, затем GUIDE устанавливает Callback кнопки свойство к следующему значению:
@(hObject,eventdata)myui('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Это - анонимная функция, которая служит ссылкой на функцию, pushbutton1_Callback. Эта анонимная функция имеет четыре входных параметра. Первый аргумент является именем функции обратного вызова. Последние три аргумента обеспечиваются MATLAB и обсуждены в разделе, Синтаксисе Коллбэка GUIDE.

Примечание

GUIDE автоматически не генерирует функции обратного вызова для других компонентов пользовательского интерфейса, таких как таблицы, панели или группы кнопок. Если вы хотите, чтобы какой-либо из этих компонентов выполнил функцию обратного вызова, то необходимо создать коллбэк путем щелчка правой кнопкой по компоненту в размещении и выбора элемента под View Callbacks в контекстном меню.

Синтаксис обратного вызова GUIDE

Все коллбэки должны принять по крайней мере три входных параметра:

  • hObject — Компонент пользовательского интерфейса, который инициировал коллбэк.

  • eventdata — Переменная, которая содержит подробную информацию об определенной мыши или действиях клавиатуры.

  • handlesstruct это содержит все объекты в пользовательском интерфейсе. GUIDE использует guidata функционируйте, чтобы сохранить и обеспечить эту структуру.

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

Аргумент EventData

eventdata аргумент предоставляет подробную информацию определенным функциям обратного вызова. Например, если конечный пользователь инициировал KeyPressFcn, затем MATLAB предоставляет информацию относительно определенного ключа (или комбинация ключей) что нажатый конечный пользователь. Если eventdata не доступно для функции обратного вызова, затем MATLAB передает ее как пустой массив. В следующей таблице перечислены коллбэки и компоненты то использование eventdata.

Имя свойства коллбэкаКомпонент
WindowKeyPressFcn
WindowKeyReleaseFcn
WindowScrollWheel
figure
KeyPressFcnfigure, uicontrol, uitable
KeyReleaseFcnfigure, uicontrol, uitable
SelectionChangedFcnuibuttongroup
CellEditCallback
CellSelectionCallback
uitable

Осуществляйте обмен данными среди коллбэков GUIDE

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

МетодОписаниеТребования и компромиссы
Совместно используйте UserData

Получите или установите значения свойств непосредственно через объект компонента.

Все компоненты пользовательского интерфейса имеют UserData свойство, которое может хранить любые данные MATLAB.

  • Требует, чтобы доступ к компоненту установил или получил свойства.

  • UserData содержит только одну переменную за один раз, но можно сохранить несколько значений как struct массив или массив ячеек.

Совместно используйте данные приложения

Объединенные данные с определенным компонентом с помощью setappdata функция. Можно получить доступ к нему позже использование getappdata функция.

  • Требует, чтобы доступ к компоненту установил или получил данные приложения.

  • Может совместно использовать несколько переменных.

Используйте guidata

Осуществляйте обмен данными с окном рисунка с помощью guidata функция.

  • Хранилища или получают данные через любой компонент пользовательского интерфейса.

  • Хранилища только одна переменная за один раз, но можно сохранить несколько значений как struct массив или массив ячеек.

Совместное использование UserData в приложениях GUIDE

Компоненты пользовательского интерфейса содержат полезную информацию в своих свойствах. Например, можно найти текущее положение ползунка путем запроса его Value свойство. Кроме того, все компоненты имеют UserData свойство, которое может сохранить любую переменную MATLAB. Все функции обратного вызова могут получить доступ к значению, сохраненному в UserData свойство пока те функции может получить доступ к компоненту.

Настраивать приложение GUIDE для совместного использования данных о ползунке с UserData свойство, выполните эти шаги:

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

  2. Отобразите имена компонентов пользовательского интерфейса в палитре элементов:

    1. Выберите File> Preferences> GUIDE.

    2. Выберите Show names in component palette.

    3. Нажмите OK.

  3. Выберите инструмент кнопки из палитры элементов в левой стороне Редактора макетов и перетащите его в область размещения.

  4. Выберите инструмент ползунка из палитры элементов в левой стороне Редактора макетов и перетащите его в область размещения.

  5. Выберите File> Save. Сохраните пользовательский интерфейс как myslider.fig. MATLAB открывает файл кода в Редакторе.

  6. Установите начальное значение UserData свойство во вводной функции, myslider_OpeningFcn. Эта функция выполняется непосредственно перед тем, как пользовательский интерфейс отображается пользователям.

    В myslider_OpeningFcn, вставьте эти команды сразу после команды, handles.output = hObject.

    data = struct('val',0,'diffMax',1);
    set(handles.slider1,'UserData',data);
    
    После того, как вы добавляете команды, myslider_OpeningFcn выглядит так.
    function myslider_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to junk (see VARARGIN)
    
    % Choose default command line output for myslider
    handles.output = hObject;
    data = struct('val',0,'diffMax',1);
    set(handles.slider1,'UserData',data);
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes myslider wait for user response
    % uiwait(handles.figure1);
    
    Заметьте, что handles входной параметр к myslider_OpeningFcn. handles переменная является структурой, которая содержит все компоненты в пользовательском интерфейсе. Каждое поле в этой структуре соответствует отдельному компоненту. Каждое имя поля совпадает с Tag свойство соответствующего компонента. Таким образом, handles.slider1 компонент ползунка в этом пользовательском интерфейсе. Команда, set(handles.slider1,'UserData',data) хранит переменную, data, в UserData свойство ползунка.

  7. Добавьте код в коллбэк ползунка для изменения данных. Добавьте эти команды в конец функции, slider1_Callback.

    maxval = get(hObject,'Max');  
    sval = get(hObject,'Value');  
    diffMax = maxval - sval;   
    data = get(hObject,'UserData');
    data.val = sval;
    data.diffMax = diffMax;
    % Store data in UserData of slider
    set(hObject,'UserData',data);
    После того, как вы добавляете команды, slider1_Callback выглядит так.
    % --- Executes on slider movement.
    function slider1_Callback(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'Value') returns position of slider
    %        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
    maxval = get(hObject,'Max');  
    sval = get(hObject,'Value');  
    diffMax = maxval - sval;   
    data = get(hObject,'UserData');
    data.val = sval;
    data.diffMax = diffMax;
    % Store data in UserData of slider
    set(hObject,'UserData',data);
    
    Заметьте, что hObject входной параметр к slider1_Callback функция. hObject всегда компонент, который инициировал коллбэк (ползунок, в этом случае). Таким образом, set(hObject,'UserData',data), хранит data переменная в UserData свойство ползунка.

  8. Добавьте код в коллбэк кнопки для того, чтобы получить данные. Добавьте эти команды в конец функции, pushbutton1_Callback.

    % Get UserData from the slider
    data = get(handles.slider1,'UserData');
    currentval = data.val;
    diffval = data.diffMax;
    display([currentval diffval]);
    После того, как вы добавляете команды, pushbutton1_Callback выглядит так.

    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get UserData from the slider
    data = get(handles.slider1,'UserData');
    currentval = data.val;
    diffval = data.diffMax;
    display([currentval diffval]);

    Этот код использует структуру handles, чтобы получить доступ к ползунку. Команда, data = get(handles.slider1,'UserData'), получает UserData ползунка свойство. Затем display функционируйте отображает сохраненные значения.

  9. Сохраните свой код путем нажатия Save в редакторе Тулстрипе.

Совместное использование данных приложения в приложениях GUIDE

Чтобы сохранить данные приложения, вызовите setappdata функция:

setappdata(obj,name,value);
Первый вход, obj, объект компонента, в котором можно хранить данные. Второй вход, name, дружественное имя, которое описывает значение. Третий вход, value, значение, которое вы хотите сохранить.

Чтобы получить данные приложения, используйте getappdata функция:

data = getappdata(obj,name);
Компонент, obj, должен быть объект компонента, содержащий данные. Второй вход, name, должен совпадать с именем, вы раньше хранили данные. В отличие от UserData свойство, которое только содержит только одну переменную, можно использовать setappdata сохранить несколько переменных.

Чтобы настроить приложение GUIDE для совместного использования данных приложения, выполните эти шаги:

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

  2. Отобразите имена компонентов пользовательского интерфейса в палитре элементов:

    1. Выберите File> Preferences> GUIDE.

    2. Выберите Show names in component palette.

    3. Нажмите OK.

  3. Выберите инструмент кнопки из палитры элементов в левой стороне Редактора макетов и перетащите его в область размещения.

  4. Выберите инструмент ползунка из палитры элементов в левой стороне Редактора макетов и перетащите его в область размещения.

  5. Выберите File> Save. Сохраните пользовательский интерфейс как myslider.fig. MATLAB открывает файл кода в Редакторе.

  6. Установите начальное значение данных приложения во вводной функции, myslider_OpeningFcn. Эта функция выполняется непосредственно перед тем, как пользовательский интерфейс отображается пользователям. В myslider_OpeningFcn, вставьте эти команды сразу после команды, handles.output = hObject.

    setappdata(handles.figure1,'slidervalue',0); 
    setappdata(handles.figure1,'difference',1);
    После того, как вы добавляете команды, myslider_OpeningFcn выглядит так.
    function myslider_OpeningFcn(hObject,eventdata,handles,varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to junk (see VARARGIN)
    
    % Choose default command line output for junk
    handles.output = hObject;
    setappdata(handles.figure1,'slidervalue',0); 
    setappdata(handles.figure1,'difference',1);
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes junk wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    Заметьте, что handles входной параметр к myslider_OpeningFcn. handles переменная является структурой, которая содержит все компоненты в пользовательском интерфейсе. Каждое поле в этой структуре соответствует отдельному компоненту. Каждое имя поля совпадает с Tag свойство соответствующего компонента. В этом случае, handles.figure1 объект фигуры. Таким образом, setappdata может использовать объект этого рисунка хранить данные.

  7. Добавьте код в коллбэк ползунка для изменения данных. Добавьте эти команды в конец функции, slider1_Callback.

    maxval = get(hObject,'Max');  
    currval = get(hObject,'Value');  
    diffMax = maxval - currval;   
    % Store application data
    setappdata(handles.figure1,'slidervalue',currval); 
    setappdata(handles.figure1,'difference',diffMax);
    После того, как вы добавляете команды, slider1_Callback выглядит так.
    function slider1_Callback(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'Value') returns position of slider
    %        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
    maxval = get(hObject,'Max');  
    currval = get(hObject,'Value');  
    diffMax = maxval - currval;   
    % Store application data
    setappdata(handles.figure1,'slidervalue',currval); 
    setappdata(handles.figure1,'difference',diffMax);
    Эта функция обратного вызова имеет доступ к handles структура, таким образом, setappdata команды хранят данные в handles.figure1.

  8. Добавьте код в коллбэк кнопки для того, чтобы получить данные. Добавьте эти команды в конец функции, pushbutton1_Callback.

    % Retrieve application data
    currentval = getappdata(handles.figure1,'slidervalue');
    diffval = getappdata(handles.figure1,'difference');
    display([currentval diffval]);
    После того, как вы добавляете команды, pushbutton1_Callback выглядит так.
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Retrieve application data
    currentval = getappdata(handles.figure1,'slidervalue');
    diffval = getappdata(handles.figure1,'difference');
    display([currentval diffval]);
    Эта функция обратного вызова имеет доступ к handles структура, таким образом, getappdata команды получают данные от handles.figure1.

  9. Сохраните свой код путем нажатия Save в редакторе Тулстрипе.

Используйте guidata сохранить и осуществлять обмен данными в приложениях GUIDE

GUIDE использует guidata функционируйте, чтобы сохранить структуру под названием handles, который содержит все компоненты пользовательского интерфейса. MATLAB передает handles массив к каждой функции обратного вызова. Если вы хотите использовать guidata чтобы совместно использовать дополнительные данные, затем добавьте поля в handles структура во вводной функции. Вводная функция является функцией, определяемой около верхней части вашего файла кода, который имеет _OpeningFcn на имя.

Чтобы изменить ваши данные в функции обратного вызова, измените handles структура, и затем хранит его с помощью guidata функция. Эта функция обратного вызова ползунка показывает, как изменить и сохранить handles структура в функции обратного вызова GUIDE.

function slider1_Callback(hObject, eventdata,handles)
% hObject   handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range
	handles.myvalue = 2;
	guidata(hObject,handles);
end 

Пример GUIDE: Совместное использование Данных Ползунка Используя guidata

Вот предварительно созданное приложение GUIDE, которое использует guidata функция, чтобы осуществлять обмен данными между ползунком и текстовым полем. Когда вы перемещаете ползунок, номер, отображенный в текстовом поле, изменяется, чтобы показать новое положение ползунка.

Пример GUIDE: Осуществляйте обмен данными между двумя приложениями

Вот предварительно созданное приложение GUIDE, которое использует данные приложения и guidata функция, чтобы осуществлять обмен данными между двумя диалоговыми окнами. При вводе текст во втором диалоговом окне и нажимаете ОК, изменения названия кнопки в первом диалоговом окне.

В changeme_main.m, buttonChangeMe_Callback функция выполняет эту команду, чтобы отобразить второе диалоговое окно:

changeme_dialog('changeme_main', handles.figure)

handles.figure входным параметром является Figure объект для changeme_main диалогового окна.

changeme_dialog функция получает handles структура от Figure объект. Таким образом целый набор компонентов в changeme_main диалоговом окне доступен для второго диалогового окна.

Пример GUIDE: Осуществляйте обмен данными среди трех приложений

Вот предварительно созданное приложение GUIDE, которое использует guidata и UserData осуществлять обмен данными среди трех окон приложения. Большое окно является редактором иконок, который принимает информацию из окон палитры инструментов и цветовой палитры.

В guide_inconeditor.m, функциональный guide_iconeditor_OpeningFcn содержит эту команду:

colorPalette = guide_colorpalette('iconEditor', hObject)

Аргументы:

  • 'iconEditor' указывает, что коллбэк в guide_iconEditor окне инициировал выполнение функции.

  • hObject Figure объект для guide_iconEditor окна.

  • colorPalette Figure объект для guide_colorPalette окна.

Точно так же guide_iconeditor_OpeningFcn вызывает guide_toolpalette функция с подобными аргументами ввода и вывода.

Передача Figure объект между этими функциями позволяет guide_iconEditor окну получать доступ к handles структура других двух окон. Аналогично, другие два окна могут получить доступ к handles структура для guide_iconEditor окна.

Переименование и удаление сгенерированных GUIDE обратных вызовов

Переименование обратных вызовов

GUIDE создает имя функции обратного вызова путем объединения Tag компонента свойство и имя свойства коллбэка. Если вы изменяете Tag компонента значение, затем GUIDE изменяет название коллбэка в следующий раз, когда вы сохраняете пользовательский интерфейс.

Если вы решаете изменить Tag значение после сохранения пользовательского интерфейса, затем GUIDE обновляет следующие элементы (принимающий, что все компоненты имеют уникальный Tag значения.

  • Определение функции обратного вызова компонента

  • Значение свойства коллбэка компонента

  • Ссылки в файле кода к соответствующему полю в handles структура

Переименовать функцию обратного вызова, не изменяя Tag компонента свойство:

  1. Поменяйте имя в определении функции обратного вызова.

  2. Обновитесь свойство коллбэка компонента путем изменения первого аргумента передало анонимной функции. Например, исходное свойство коллбэка для кнопки может выглядеть так:

    @(hObject,eventdata)myui('pushbutton1_Callback',...
                               hObject,eventdata,guidata(hObject))

    В этом примере необходимо измениться, 'pushbutton1_Callback' к новому имени функции.

  3. Измените все другие ссылки на старое имя функции к новому имени функции в файле кода.

Удаление обратных вызовов

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

  1. Ищите и замените все экземпляры, которые относятся к функции обратного вызова в вашем коде.

  2. Откройте пользовательский интерфейс в GUIDE и замените все экземпляры, которые относятся к функции обратного вызова в Property Inspector.

  3. Удалите функцию обратного вызова.

Похожие темы