Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практикум по матлабу.pdf
Скачиваний:
156
Добавлен:
29.03.2015
Размер:
1.19 Mб
Скачать

Поскольку это свойство само является объектом, то, выполнив двойной щелчок на этом свойстве, мы раскроем его свойства. После этого следует найти свойство String, задать его значение (соответствующий текст, например ’Номер сигнала’) в среднем окне, а, найдя свойство FontUnits, задать его значение normalized.

Следует еще отметить свойство Tag, которое имеют все объекты. Особенно важно знать и/или задать это свойство для тех объектов, к которым потом в программе придется обращаться. Например, если на рисунке задано несколько окон вывода, то для вывода графика в требуемое окно проще всего его будет идентифицировать окно с помощью свойства Tag. Это свойство, как правило, имеет по умолчанию вполне осмысленное значение (Axes1, например), но при желании его можно задать так, как вам нравится.

После разработки внешнего вида графического интерфейса с помощью визуального редактора необходимо сохранить это в виде m-файла. При нажатии на панели управления пункта меню File/Close control panel появится запрос на сохранение созданного интерфейса, и в случае положительного ответа будут созданы два файла – NAME.M и NAME.MAT (где NAME – заданное вами имя). Первый файл – это соответствующий текст программы, реализующий разработанный интерфейс, а второй – набор данных для него. При необходимости впоследствии внести изменения во внешний вид графического интерфейса нужно в командном окне MATLAB запустить файл NAME.M, а потом с помощью команды guide(gcf) вызвать визуальный редактор с этим же файлом. Следует полностью выполнить этап разработки внешнего вида графического интерфейса, поскольку дальнейшая модификация текста программы NAME.M будет производиться вручную, путем изменения и/или дополнения текста программы определенными операторами. Если Вы после этого решите снова вызвать GUIDE – визуальный редактор формы, то все ваши изменения, внесенные вручную, при попытке сохранить доработанный интерфейс, пропадут. Поэтому сначала разрабатывайте внешний вид своего графического интерфейса, а потом его дорабатывайте.

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

Созданный по описанной выше схеме GUI не обладает никакой функциональностью – он пока ничего не может делать за исключением стандартных функций Windows - менять размеры окна и закрывать окно. Теперь необходимо научить его выполнять требуемые действия при нажатии соответствующих кнопок и редактировании данных. Основным средством взаимодействия графического интерфейса с функциями, выполняющими требуемые действия, является задание свойств кно-

162

пок и редактируемых окон, которое называется CallBack. Значение (типа строка), которое присваивается этому свойству, и есть имя функции, которая вызывается при активации соответствующего объекта. Эта активация происходит при нажатии мышкой на соответствующую кнопку (если это свойство кнопки) и при нажатии клавиши Enter либо любой другой кнопки (если это свойство редактируемого окна).

Для задания этих свойств можно использовать визуальный редактор GUIDE (при вызванном рисунке) или с помощью стандартного редактора m-файлов дописать соответствующие параметры функции uicontrol при обращении к ней в функции NAME.M, которую создал GUIDE. Например для того, чтобы задать имя функции, вызываемой при нажатии кнопки RUN, необходимо вызвать соответствующий рисунок-интерфейс (запустить NAME.M) и после этого вызвать GUIDE. Выделив соответствующий элемент (кнопку RUN) и вызвав редактор свойств, необходимо в списке свойств выделить свойство CallBack и в строке задания свойств в кавычках вписать имя функции (например, Func_Run), которая будет вызываться при нажатии этой кнопки. Аналогично задаются функции и для других кнопок и редактируемых окон. Тогда соответствующее обращение к функции uicontrol для кнопки RUN будет выглядеть следующим образом:

h1 = uicontrol(’Parent’,h0, ...

’Units’,’normalized’, ...

’FontUnits’,’normalized’, ...

’Callback’,’Func_Run’, ...

’FontSize’,0.45, ...

’ListboxTop’,0, ...

’Position’,[0.722 0.131 0.1 0.0542], ...

’String’,’Run’, ...

’Tag’,’Run’);

При ручной правке функции NAME.M необходимо добавить в аргументы соответствующей функции uicontrol строку вида ’CallBack’,’Func_run’, ....

9.2.1.Общая структура функции NAME.M графического интерфейса

После создания внешнего вида интерфейса и описанной его доработки M-файл имеет, как правило, следующую структуру.

1.Один или несколько операторов определения окна вывода, которые имеют вид

163

h1 = axes(’Parent’,h0, ...

’FontUnits’,’normalized’, ...

’CameraUpVector’,[0 1 0], ...

’CameraUpVectorMode’,’manual’, ...

’Color’,[1 1 1], ...

’ColorOrder’,mat7, ...

’FontSize’,0.0877, ...

’Position’,[0.061 0.048 0.63 0.24], ...

’Tag’,’Axes3’, ...

’XColor’,[0 0 0], ...

’YColor’,[0 0 0], ...

’ZColor’,[0 0 0]);

Среди всех свойств этого объекта – окна вывода – для нас наибольший интерес представляет свойство ’Tag’, ибо по имени свойства (в данном примере ’Axes3’) впоследствие можно будет направлять вывод результатов расчета в это окно.

2.Каждый оператор определения окна выбора сопровождается целым рядом операторов, определяющих разметку осей, надписи на осях и т.д. Это операторы вида

h2 = text(’Parent’,h1, ...

’Color’,[0 0 0], ...

’HandleVisibility’,’off’, ...

’HorizontalAlignment’,’center’, ...

’Position’,[-0.0648 0.487 9.160], ...

’Rotation’,90, ...

’Tag’,’Axes2Text3’, ...

’VerticalAlignment’,’baseline’);

set(get(h2,’Parent’),’YLabel’,h2);

Первый оператор ответственен за создание текста – подписи под осью. В приведенном примере сам текст отсутствует – у этого объекта свойству ’String’ никакое значение не присвоено, а, значит, под данной осью нет никакого текста. Второй оператор указывает на то, что этот текст является наследником объекта ’YLabel’ и что текст, если бы он был, размещался бы под осью Y.

164

3.Остальные операторы – операторы uicontrol, определяющие свойства таких объектов, как редактируемые окна, статический текст и кнопки. Типичный оператор, определяющий редактируемое окно, имеет вид

h1 = uicontrol(’Parent’,h0, ...

’Units’,’normalized’, ...

’FontUnits’,’normalized’, ...

’BackgroundColor’,[1 1 1], ...

’Callback’,’Func_Edit’, ...

’FontSize’,0.260, ...

’ListboxTop’,0, ...

’Position’,[0.814 0.889 0.120 0.0583], ...

’String’,num2str(N), ...

’Style’,’edit’, ...

’Tag’,’EditN’);

Следует обратить внимание на такие свойства этого объекта, как ’Callback’

– его значение (в данном примере ’Func_Edit’) определяет имя процедуры, которая осуществляет редактирование значения, введенного в соответствующее окно. Свойство ’Tag’, имеющее в данном примере значение ’EditN’, определяет возможность найти этот объект по этому свойству. Свойство ’Style’, имеющее значение ’edit’, указывает на то, что это редактируемое окно. Значение свойства ’String’ определяет строку, которая будет выводиться в редактируемом окне. В данном примере для вывода используется функция num2str, которая переводит значение числовой переменной (в данном примере N) в строковое представление.

4.Оператор, определяющий кнопку, как правило, имеет вид

h1 = uicontrol(’Parent’,h0, ...

’Units’,’normalized’, ...

’FontUnits’,’normalized’, ...

’Callback’,’Func_Run’, ...

’FontSize’,0.45, ...

’ListboxTop’,0, ...

’Position’,[0.722 0.13125 0.1 0.0542], ...

’Style’,’pushbutton’, ...

’String’,’Run’, ...

’Tag’,’Run’);

165