- •Лабораторная работа № 5 тема:«Создание приложений с gui без среды guide»
- •Простой пример - приложение с кнопкой и осями
- •Задание размеров окна приложения и элементов интерфейса
- •Задание дополнительных параметров в функциях обработки событий
- •Скрытие указателей объектов приложения с gui
- •Получение указателей на объекты приложения в функциях обработки событий, функция guihandles.
- •Сохранение данных, полученных в функции обработки событий, функция guidata.
- •Обмен данными между функциями обработки событий. Обработка событий объектов, создаваемых приложением.
- •Сохранение объектов приложения для повторных запусков.
- •Рисование кривых мышью
- •Перемещение объектов на осях мышью
- •Приложение с панелью переключателей для zoom и pan
Лабораторная работа № 5 тема:«Создание приложений с gui без среды guide»
Это актуальный вопрос для тех, кто собирается писать сложные многооконные приложения с графическим интерфейсом. Начнем с самого простого примера.
Простой пример - приложение с кнопкой и осями
Требуется написать приложение с графическим интерфейсом, выводящее график функции на оси окна приложения при нажатии на кнопку Plot (см. рис. 1).
Это приложение будет файл-функцией myplotgui с подфункцией BtnPlotCallback обработки события Callback кнопки Plot, которое возникает при нажатии на кнопку (обработку событий можно организовывать и во внешних файлах), но мы пока будем программировать приложение в одной функции с подфункциями обработки событий элементов интерфейса и объектов приложения.
Рис. 1. Окно приложения myplotgui
В файл-функции myplotgui следует:
Создать графическое окно при помощи функции figure
Создать оси, вызвав функцию axes;
Создать кнопку, т.е. графический объект uicontrol, использовав одноименную функцию uicontrol.
При создании кнопки в основной функции необходимо: указать ее положение в графическом окне приложения, задать надпись на ней и, самое главное, связать событие Callback с соответствующей подфункцией обработки события Callback при помощи указателя @ на подфункцию. При программировании обработки событий элементов интерфейса и объектов приложения (не только Callback, но и других) следует учитывать, что соответствующая подфункция обработки события должна иметь как минимум два входных аргумента, назовем их src и evt, как и в справочной системе MATLAB:
function BtnPlotCallback(src, evt)
где src содержит указатель на тот объект, который вызвал событие, а evt является структурой и может быть пустой для некоторых событий. Можно задавать и дополнительные входные аргументы для подфункций обработки событий, что будет рассмотрено ниже. Пока дополнительных аргументов не требуется и при создании кнопки Plot в основной функции мы зададим в качестве значения ее свойства Callback указатель на функцию BtnPlotCallback, т.е. @BtnPlotCallback.
Пока не будем заниматься точным заданием размеров графических объектов и напишем самый простой вариант файл-функции myplotgui с подфункцией
function myplotgui
% создание графического окна с заголовком myplotgui и без надписи Figure 1
hF = figure('Name', 'myplotgui', 'NumberTitle', 'off');
% создание осей
hA = axes('Position', [0.1 0.2 0.8 0.7]);
% создание кнопки и задание свойству Callback значения указателя на подфункцию
hBtnPlot = uicontrol('Style', 'pushbutton', ...
'Position', [20 20 120 30],...
'String', 'Plot',...
'Callback', @BtnPlotCallback);
function BtnPlotCallback(src,evt)
% подфункция обработки события Callback кнопки Plot
surf(peaks(30))
Функцию myplotgui с подфункцией BtnPlotCallback надо сохранить в одном файле myplotgui.m. Теперь для запуска нашего простого приложения с графическим интерфейсом достаточно вызвать его из командной строки (каталог, в котором находится файл myplotgui.m, должен быть текущим):
>> myplotgui
Нажатие на кнопку Plot приводит к появлению графика на осях окна приложения.
Функция uicontrol позволяет создать такие элементы управления, как кнопку, флаг, список и другие. То, что она создает, зависит от значения свойства Style, указанного при создании объекта.
Значение свойства Style |
Что получается |
pushbutton (по умолчанию) |
кнопка |
togglebutton |
кнопка-переключатель |
radiobutton |
переключатель |
checkbox |
флаг |
edit |
область ввода текса |
text |
статический текст |
slider |
полоса скроллинга |
listbox |
список |
popupmenu |
раскрывающийся список |
У всех объектов uicontrol многие остальные свойства имеют схожие значения, например: Position, Units, FontName, FontSize. Некоторые свойства имеют разный смысл. Если значение свойства String кнопки или флага - надпись на кнопке или флаге, то для списка это его содержимое. Кстати, событие Callback не единственно возможное. Назначение всех свойств и событий элементов интерфейса, создаваемых функцией uicontrol, описано в справочной системе:
>> doc uicontrol
Основные из них мы рассмотрим позже.