- •Санкт-Петербургский государственный электротехнический университет
- •______________________________________________________________________ Кафедра моэвм
- •Санкт-Петербург
- •2007 Введение
- •Взаимодействие между пользователем и компьютером
- •Основные принципы создания интерфейса
- •Проектирование эргономичного интерфейса
- •Размещение информации на экране
- •Использование цвета
- •Выделение элементов интерфейса
- •Непротиворечивость и стандартизация
- •Отображение текстовой информации
- •Ввод текстовой информации
- •Дизайн заголовков и полей
- •Средства управления графическим интерфейсом
- •Принципы создания и проектирования меню
- •5. Дескрипторная графика
- •5.1. Назначение дескрипторной графики
- •5.2. Иерархия графических объектов
- •5.3. Текущий графический объект; указатели на объекты
- •5.4. Доступ к значениям свойств графических объектов
- •5.5. Свойства осей
- •5.6. Свойства графических окон
- •5.6.1. Расположение и вид графических окон
- •5.6.2. Способы графического вывода
- •5.6.3. Цветовая палитра
- •5.6.4. Печать графического окна
- •5.7. Базовые графические объекты.
- •5.7.1. Текстовый объект, вывод текста и математических формул в графическое окно.
- •5.7.2. Размещение текстового объекта, определение его размеров и положения.
- •5.7.3. Размещение текста на трехмерных графиках.
- •5.7.4. Изменение вида текстового объекта.
- •5.7.5. Указание положения текстового объекта и надписи при помощи свойств. Пример: "бегущая строка".
- •5.7.6. Вывод многострочного текста.
- •5.7.7. Примечание про логическое индексирование.
- •5.7.8. Заголовок и подписи осей это текстовые объекты, потомки осей.
- •6. Приложения с gui
- •6.1. Создание приложения hello в среде guide
- •6.2. Запуск приложения без среды guide и редактирование
- •6.3. Как работает приложение, созданное в среде guide?
- •7. Заключение
6.2. Запуск приложения без среды guide и редактирование
Разумеется, созданное в предыдущем разделе приложение hello не требует для запуска среду GUIDE. Закройте окно среды GUIDE (если оно открыто) и перейдите в командное окно MatLab. Убедитесь, что папка с приложением является текущей (она должна быть выбрана в раскрывающемся списке Current Directory рабочей среды MatLab). Если это не так, то сделайте ее текущей, воспользовавшись кнопкой справа от раскрывающегося списка Current Directory, или окном Current Directory .
Для запуска приложения достаточно набрать его имя в командной строке и нажать <Enter>:
>> hello
Приложение можно вызывать не только из командной строки, но и из любого другого приложения, при этом MatLab должен быть способен найти путь к нему, т.е. папка с приложением должна быть текущей, или содержаться в пути поиска MatLab
Для редактирования существующего приложения с графическим интерфейсом пользователя есть два способа:
1. Запустить среду GUIDE командой guide и в появляющемся диалоговом окне GUIDE Quick Start (см. рис. 2 предыдущего раздела) перейти ко вкладке Open Existing GUI и выбрать приложение.
2. Вызвать guide, указав в качестве входного аргумента имя файла с приложением:
>> guide('hello.fig')
При таком способе папка с приложением должна быть текущей, или содержаться в пути поиска MatLab.
6.3. Как работает приложение, созданное в среде guide?
Это важный вопрос для тех, кто хочет создавать сложные приложения. Если Ваша цель состоит в написании простых приложений, то достаточно научиться размещать элементы интерфейса и программировать их события в подфункциях так, как описано выше в разделе "Создание приложения hello в среде GUIDE". Простое приложение состоит из одного основного окна, которое содержит различные элементы управления, области вывода текстовой информации и оси. Использование стандартных диалоговых окон облегчает работу с файлами, ввод данных, выбор шрифта, цвета и печать результатов. Однако, если Вы планируете программировать многооконные приложения, то прочтите этот раздел сейчас, или вернитесь к нему по мере надобности.
Обсудим работу приложения с графическим интерфейсом пользователя hello, созданию которого посвящен раздел "Создание приложения hello в среде GUIDE". Перейдите в режим редактирования приложения одним из способов, приведенных в предыдущем разделе, например:
>> guide('hello.fig')
Откройте в редакторе M-файлов файл-функцию hello. Это функция с переменным числом входных и выходных аргументов, ниже она приведена без автоматически созданных комментариев и подфункций.
function varargout = hello(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @hello_OpeningFcn, ...
'gui_OutputFcn', @hello_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
Поставьте точку останова в редакторе M-файлов в строке с первым исполняемым оператором gui_Singleton = 1. Запустите приложение hello, например, из командной строки:
>> hello
и выполните операторы hello по шагам используя F10 (или кнопку Step).
Сначала переменной gui_Singleton присваивается 1, затем формируется структура gui_State с полями:
gui_Name - имя M-файла с работающей в данный момент файл-функцией приложения, которое возвращается функцией mfilename;
gui_Singleton - сколько копий приложения может быть запущено одновременно, в нашем случае это поле содержит 1, это значит, что может быть запущена только одна копия приложения (0 означает, что может быть одновременно запущено несколько копий);
gui_OpeningFcn - указатель на подфункцию hello_OpeningFcn (в файле hello.m), выполняющуюся перед тем, как окно приложения появится на экране;
gui_OutputFcn - указатель на подфункцию hello_OutputFcn (в файле hello.m), которая определяет, что возвращает функция hello, вызванная с выходным аргументом (по умолчанию, указатель на графическое окно приложения);
gui_LayoutFcn - по умолчанию пустой массив, может быть указателем на функцию, которая определяет способ появления приложения.
gui_Callback - пока пустой массив, при возникновении события от некоторого элемента управления будет содержать указатель на функцию hello c необходимыми входными аргументами, которые и определят исполняемую подфункцию в hello.m.
После заполнения структуры gui_State проверяется, была ли функция hello вызвана со входными аргументами (nargin содержит число входных аргументов) и является ли первый из них строкой. При запуске приложения входных аргументов не было. Они появляются при возникновении событий от элементов управления. Действительно, если в инспекторе свойств отобразить свойства кнопки Hello и посмотреть значение ее свойства Callback, то станет понятно, что при возникновении события Callback кнопки вызывается функция hello: hello('btnHello_Callback',gcbo,[],guidata(gcbo)). Тогда в поле gui_Callback структуры gui_State заносится соответствующий указатель при помощи функции str2func.
Функция str2func конструирует указатель на функцию, заданную строкой, например: >> f=str2func('exp')
f =
@exp
Следующий оператор if проверяет, была ли функция hello вызвана со выходными аргументами (nargout содержит число входных аргументов) и вызывает специальную функцию gui_mainfcn от структуры gui_State и входных аргументов hello. При первом вызове входных аргументов не было и gui_mainfcn создаст окно приложения. Последующие вызовы hello со входными аргументами, вызванные возникновением событий от элементов управления, приведут к обращению к соответствующим подфункциям обработки событий в hello.m. Это можно проследить пошаговым выполнением в редакторе M-файлов.