Примечание
Окружение GUIDE будет удаляемо в следующем релизе. После удаления GUIDE существующие приложения GUIDE будут продолжать запускаться в MATLAB® но они не будут редактироваться в GUIDE.
Чтобы продолжить редактирование существующего приложения GUIDE, смотрите GUIDE Migration Strategies для получения информации о том, как помочь поддерживать совместимость приложения с будущими релизами MATLAB. Чтобы создать новые приложения в интерактивном режиме, вместо этого Разрабатывайте приложения с использованием App Designer.
Пользовательский интерфейс и графические компоненты имеют определенные свойства, которые можно связать с определенными функциями обратного вызова. Каждое из этих свойств соответствует определенному пользовательскому действию. Например, uicontrol имеет свойство, называемое Callback
. Можно задать значение этого свойства как указатель для функции обратного вызова, анонимной функции или вектора символов, содержащего выражение MATLAB. Установка этого свойства заставляет ваше приложение реагировать при взаимодействии пользователя с uicontrol. Если на Callback
свойство не имеет заданного значения, тогда ничего не происходит при взаимодействии пользователя с uicontrol.
В этой таблице перечислены свойства коллбэка, которые доступны, действия пользователя, которые запускают функцию обратного вызова, и наиболее распространенные UI и графические компоненты, которые их используют.
Свойство коллбэка | Действие пользователя | Компоненты, которые используют это свойство |
---|---|---|
ButtonDownFcn | Конечный пользователь нажимает кнопку мыши, пока указатель находится на компоненте или рисунке. | |
Callback | Конечный пользователь инициирует компонент. Например: выбор элемента меню, перемещение ползунка или нажатие кнопки. | |
CellEditCallback | Конечный пользователь редактирует значение в таблице, камеры которой можно редактировать. | |
CellSelectionCallback | Конечный пользователь выбирает камеры в таблице. | |
ClickedCallback | Конечный пользователь нажимает на инструмент нажатия или переключателя левой кнопкой мыши. | |
CloseRequestFcn | Рисунок закроется. | |
CreateFcn | Коллбэк выполняется, когда MATLAB создает объект, но до его отображения. |
|
DeleteFcn | Коллбэк выполняется непосредственно перед удалением рисунка MATLAB. |
|
KeyPressFcn | Конечный пользователь нажимает клавишу клавиатуры, пока указатель на объект. | |
| Конечный пользователь отпускает клавишу клавиатуры, пока указатель на объект. | |
OffCallback | Выполняется, когда | |
OnCallback | Выполняется, когда | |
| Конечный пользователь изменяет размер группы кнопок, рисунки или панели, | |
SelectionChangedFcn | Конечный пользователь выбирает другой переключатель или кнопку-переключатель в группе кнопок. | |
WindowButtonDownFcn | Конечный пользователь нажимает кнопку мыши, пока указатель находится в окне рисунка. | |
WindowButtonMotionFcn | Конечный пользователь перемещает указатель мыши в окне рисунка. | |
WindowButtonUpFcn | Конечный пользователь отпускает кнопку мыши. | |
WindowKeyPressFcn | Конечный пользователь нажимает клавишу, пока указатель находится на рисунке или на любом из дочерних объектов. | |
WindowKeyReleaseFcn | Конечный пользователь отпускает клавишу, пока указатель находится на рисунке или любом из дочерних объектов. | |
| Конечный пользователь поворачивает колесо мыши, пока указатель мыши находится на рисунке. |
После того, как вы добавите 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 в контекстном меню.
Все коллбэки должны принимать по крайней мере три входных параметров:
hObject
- компонент UI, который инициировал коллбэк.
eventdata
- Переменная, содержащая подробную информацию о конкретных действиях мыши или клавиатуры.
handles
- A struct
который содержит все объекты в пользовательском интерфейсе. GUIDE использует guidata
функция для хранения и обслуживания этой структуры.
Чтобы функция обратного вызова приняла дополнительные аргументы, необходимо поместить дополнительные аргументы в конец списка аргументов в определении функции.
The eventdata
аргумент предоставляет подробную информацию для определенных функций обратного вызова. Для примера, если конечный пользователь запускает KeyPressFcn
MATLAB предоставляет информацию относительно конкретной клавиши (или комбинации клавиш), которую нажал конечный пользователь. Если eventdata
недоступен для функции обратного вызова, затем MATLAB передает его как пустой массив. В следующей таблице перечислены коллбэки и компоненты, которые используют eventdata
.
Имя свойства коллбэка | Компонент |
---|---|
WindowKeyPressFcn WindowKeyReleaseFcn WindowScrollWheel | figure |
KeyPressFcn | figure , uicontrol , uitable |
KeyReleaseFcn | figure , uicontrol , uitable |
SelectionChangedFcn | uibuttongroup |
CellEditCallback CellSelectionCallback | uitable |
Чтобы создать в приложении элементы управления, меню и графические объекты, которые являются взаимозависимыми, необходимо явным образом обмениваться данными с частями приложения, которые должны иметь доступ к компоненту.
Метод | Описание | Требования и компромиссы |
---|---|---|
Совместное использование UserData | Получите или установите значения свойств непосредственно через объект компонента. Все компоненты пользовательского интерфейса имеют |
|
Совместное использование данных приложений | Связать данные с определенным компонентом можно используя функцию |
|
Использование guidata | Обменивайтесь данными с окном рисунка, используя |
|
Компоненты UI содержат полезную информацию в своих свойствах. Для примера можно найти текущее положение ползунка, запросив его Value
свойство. В сложение все компоненты имеют UserData
свойство, которое может хранить любой переменный MATLAB. Все функции обратного вызова могут получить доступ к значению, хранящемуся в UserData
свойство, пока эти функции могут получить доступ к компоненту.
Чтобы настроить приложение GUIDE для совместного использования данными ползунка с UserData
свойство, выполните следующие шаги:
В Командном окне введите guide
чтобы открыть новый пустой графический интерфейс пользователя.
Отображение имен компонентов пользовательского интерфейса в палитре компонентов:
Выберите File > Preferences > GUIDE.
Выберите Show names in component palette.
Нажмите OK.
Выберите инструмент кнопки из палитры компонентов в левой части редактора размещений и перетащите его в область размещения.
Выберите инструмент ползунка из палитры компонентов в левой части редактора размещений и перетащите его в область размещения.
Выберите File > Save. Сохраните пользовательский интерфейс как myslider.fig
. MATLAB открывает файл кода в редакторе.
Установите начальное значение 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
. The handles
переменная является структурой, которая содержит все компоненты в пользовательском интерфейсе. Каждое поле в этой структуре соответствует отдельному компоненту. Каждое имя поля соответствует Tag
свойство соответствующего компонента. Таким образом, handles.slider1
является компонентом ползунка в этом пользовательском интерфейсе. Команда, set(handles.slider1,'UserData',data)
сохраняет переменную, data
, в UserData
свойство ползунка.Добавьте код к коллбэку ползунка для изменения данных. Добавьте эти команды в конец функции, 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
свойство ползунка.Добавьте код к коллбэку для извлечения данных. Добавьте эти команды в конец функции, 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
функция отображает сохраненные значения.
Сохраните код, нажав Save в редакторе.
Чтобы сохранить данные приложения, вызовите setappdata
функция:
setappdata(obj,name,value);
obj
, - объект компонента, в котором можно хранить данные. Второй вход, name
, - понятное имя, описывающее значение. Третий вход, value
, - значение, которое вы хотите хранить.Чтобы извлечь данные приложения, используйте getappdata
функция:
data = getappdata(obj,name);
obj
, должен быть объектом компонента, содержащим данные. Второй вход, name
, должно совпадать с именем, используемым для хранения данных. В отличие от UserData
свойство, которое содержит только одну переменную, вы можете использовать setappdata
для хранения нескольких переменных.Чтобы настроить приложение GUIDE для совместного использования данными о приложениях, выполните следующие шаги:
В Командном окне введите guide
чтобы открыть новый пустой графический интерфейс пользователя.
Отображение имен компонентов пользовательского интерфейса в палитре компонентов:
Выберите File > Preferences > GUIDE.
Выберите Show names in component palette.
Нажмите OK.
Выберите инструмент кнопки из палитры компонентов в левой части редактора размещений и перетащите его в область размещения.
Выберите инструмент ползунка из палитры компонентов в левой части редактора размещений и перетащите его в область размещения.
Выберите File > Save. Сохраните пользовательский интерфейс как myslider.fig
. MATLAB открывает файл кода в редакторе.
Установите начальное значение данных приложения в функции открытия, 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
. The handles
переменная является структурой, которая содержит все компоненты в пользовательском интерфейсе. Каждое поле в этой структуре соответствует отдельному компоненту. Каждое имя поля соответствует Tag
свойство соответствующего компонента. В этом случае handles.figure1
- объект рисунка. Таким образом, setappdata
может использовать этот рисунок объект для хранения данных.Добавьте код к коллбэку ползунка для изменения данных. Добавьте эти команды в конец функции, 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
.Добавьте код к коллбэку для извлечения данных. Добавьте эти команды в конец функции, 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
.Сохраните код, нажав Save в редакторе.
guidata
Хранение и совместное использование данных в приложениях GUIDEGUIDE использует 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
функция для совместного использования данных между двумя диалоговыми окнами. Когда вы вводите текст во втором диалоговом окне и нажимаете кнопку OK, метка кнопки изменяется в первом диалоговом окне.
В changeme_main.m
, а buttonChangeMe_Callback
функция выполняет эту команду для отображения второго диалогового окна:
changeme_dialog('changeme_main', handles.figure)
The handles.figure
входной параметр является Figure
объект для диалогового окна changeme_main.
The changeme_dialog
функция извлекает handles
структура из Figure
объект. Таким образом, весь набор компонентов в диалоговом окне changeme_main доступен для второго диалогового окна.
Вот предварительно построенное приложение 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 создает имя функции обратного вызова путем объединения Tag
компонента свойство и имя свойства коллбэка. Если вы меняете
Tag
компонента Значение, затем GUIDE изменяет имя коллбэка при следующем сохранении пользовательского интерфейса.
Если вы решите изменить Tag
значение после сохранения пользовательского интерфейса, затем GUIDE обновляет следующие элементы (принимая, что все компоненты имеют уникальный Tag
значения).
Определение функции обратного вызова компонента
Значение свойства коллбэка компонента
Ссылки в файле кода на соответствующее поле в handles
структура
Переименование функции обратного вызова без изменения Tag
компонента свойство:
Измените имя в определении функции обратного вызова.
Обновите свойство коллбэка компонента путем изменения первого аргумента, переданного анонимной функции. Например, свойство исходного коллбэка для кнопки может выглядеть следующим образом:
@(hObject,eventdata)myui('pushbutton1_Callback',... hObject,eventdata,guidata(hObject))
В этом примере вы должны изменить, 'pushbutton1_Callback'
к новому имени функции.
Измените все другие ссылки на старое имя функции на новое имя функции в файле кода.
Вы можете удалить функцию обратного вызова, когда хотите удалить или изменить функцию, которая выполняется, когда конечный пользователь выполняет определенное действие. Чтобы удалить функцию обратного вызова:
Поиск и замена всех образцов, которые ссылаются на функцию обратного вызова в вашем коде.
Откройте пользовательский интерфейс в GUIDE и замените все образцы, которые ссылаются на функцию обратного вызова в Property Inspector.
Удалите функцию обратного вызова.