Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложения с GUI и дескрипторная графика.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
699.39 Кб
Скачать

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-файлов.