Смекни!
smekni.com

Создание графического интерфейса пользователя (стр. 4 из 5)

% Считывание данных из файла в массив

Mas = load('data.txt');

% Определение размеров массива

SMas = size(Mas);

% Проверка массива данных

if ((SMas(2) ~= 2) | (ndims(Mas) ~= 2) | ~isnumeric(Mas))

errordlg('Неизвестный формат файла с данными', 'Ошибка!')

else

% Графическое отображение данных

headers.line = plot(Mas(:,1), Mas(: , 2) ) ;

end

catch

% Произошла ошибка при выполнении load

errordlg('Неизвестный формат файла с данными', 'Ошибка!')

end

Меню графического окна

Приложение MatLab может использовать стандартное меню графического окна. Среда GUIDE позволяет программисту дополнять стандартное меню или создать собственные меню. Свойство MenuBar окна приложения (объекта figure) отвечает за наличие стандартных меню File, Edit, Tools, Window и Help в работающем приложении. Значение figure данного свойства соответствует отображению стандартных меню, а none приводит к приложению без строки с меню. Вне зависимости от значения свойства MenuBar, разработчик приложения имеет возможность размещать собственные меню, которые в случае значения figure добавляются к стандартным меню графического окна. Размещение и программирование меню производится при помощи редактора меню.

Создание меню в редакторе

Перейдите в режим редактирования приложения в среде GUIDE. Принцип конструирования меню проще всего понять, создавая новое меню - убедитесь, что свойство MenuBar графического окна установлено в none. Запустите редактор меню из панели управления (или выбором пункта меню Tools->Menu Editor…), появляется окно Menu Editor, изображенное на рис. 14.

Окно редактора меню содержит две вкладки: Menu Bar, предназначенную для создания строки меню приложения, и Context Menus для контекстного меню. Области навигатора и свойств элементов меню пока пустые. Создайте меню, нажав соответствующую кнопку на панели инструментов редактора меню (убедитесь, что выбрана вкладка Menu Bar), в навигаторе появилась строка Untitled 1, сделайте ее текущей щелчком мыши. В области свойств находятся строки ввода (рис. 15).

Рис.14 Редактор меню Guide Menu Editor

Рис. 15. Задание свойств меню в редакторе


Строка Label служит для задания надписи меню или пункта меню, a Tag -для определения названия созданного объекта. Введите текст "График" в строку Label (без кавычек) и задайте имя mnGraph. Запустите приложение mygui и убедитесь в наличии меню График. Выбор меню График в работающем приложении не приводит к раскрытию меню, следует создать пункты меню. Перейдите в режим редактирования, сделайте текущей строку График в навигаторе редактора меню и добавьте пункт, нажав соответствующую кнопку на панели инструментов редактора меню. Установите надпись пункта Построить и дайте ему имя mnGraphPlot. Добавьте еще один пункт меню, сделав предварительно текущей строку График в навигаторе. Аналогичным образом задайте надпись Очистить и имя mnGraphClear. Навигатор меню должен содержать структуру, изображенную на рис. 16. Меню График имеет первый уровень, а пункты Построить, Очистить - второй.

Рис.16 Иерархия элементов меню

Запустите приложение mygui. Выбор меню График приводит к раскрытию меню. Пока при обращении к пунктам Построить и Очистить ничего не происходит, следует запрограммировать события Callback пунктов меню. Событие Callback самого меню График не требует обработки, т. к. происходит автоматическое раскрытие меню.

Программирование пунктов меню

Выбор элемента меню в навигаторе редактора меню приводит к отображению его свойств на панели Properties. Строка ввода Callback предназначена для вызова подфункции М-файла приложения, содержащего обработку событии элементов интерфейса.

В соответствующем приложению M-файле автоматически создаются подфункции обработки Callback созданных элементов меню. Программисту, как и в случае создания других элементов управления, следует наполнить их содержимым - операторами, производящими требуемые действия.

Откройте файл mygui.m в редакторе М-файлов и определите две подфункции для созданных элементов меню.

Листинг 12. Программирование пунктов меню

function mnGraphPlot_Callback(hObject, eventdata, handles)

% Вызываем обработчик нажатия кнопки Построить

btnPlot_Callback(hObject, eventdata, handles)

% Кнопка Построить должна быть недоступна

set(handles.btnPlot,'Enable','off')

% Кнопка Очистить должна быть доступна

set(handles.btnClear,'Enable','on')

function mnGraphClear_Callback(hObject, eventdata, handles)

% Вызываем обработчик нажатия кнопки Очистить

btnClear_Callback(hObject, eventdata, handles)

% Кнопка Построить должна быть доступна

set(handles.btnPlot,'Enable','on')

% Кнопка Очистить должна быть недоступна

set(handles.btnClear,'Enable','off')

Контекстное меню объектов

Объекты, в том числе и созданные в ходе работы приложения, могут иметь собственное контекстное меню, которое активизируется щелчком левой кнопки мыши. Контекстное меню позволяет получить быстрый доступ к часто используемым свойствам объекта. Конструирование контекстного меню состоит в создании его в редакторе меню, определении событий Callback пунктов меню и последующем связывании меню с объектом.

Создание меню

Перейдите к вкладке Context Menus в редакторе меню и нажмите кнопку создания контекстного меню (см. рис. 17), в навигаторе меню появляется строка для меню. Задайте ему имя cmLine. Обратите внимание, что на панели свойств нет строки ввода Label, т. к. раскрывающееся меню не должно иметь надписи. Создайте три пункта меню при помощи той же кнопки, что применяется для добавления пунктов меню окна приложения. Определите для них надписи синий, красный, зеленый и имена cmLineBlue, cmLineRed, cmLineGreen соответственно. В результате навигатор меню должен содержать структуру, приведенную на рис. 17.

Рис. 17 Отображение контекстного меню в навигаторе объектов

В работающем приложении щелчок правой кнопкой мыши по линии графика не приводит к отображению контекстного меню. Сейчас контекстное меню cmLine присутствует в приложении как объект, но другой объект - линия, создаваемая при нажатии, например, на кнопку Построить, "не знает" о том, что у нее есть собственное контекстное меню. Следующий этап состоит в связывании линии с созданным меню cmLine.

Связывание контекстного меню с объектом

Любой объект, размещенный в окне приложения, имеет свойство UIContextMenu, значением которого может являться указатель на имеющееся контекстное меню. Для того чтобы созданный объект, т. е. линия графика, обладал контекстным меню, следует установить свойству UIContextMenu значение указателя на меню cmLine, содержащееся в структуре handles. Построение линии в приложении mygui производится или при нажатии пользователем кнопки Построить, или при выборе пункта Построить меню График. Присвойте свойству линии UIContextMenu требуемое значение во всех блоках М-файла, связанного с mygui, которые отвечают за отображение графика функции (листинг 8).

Листинг 13. Связывание контекстного меню с линией

handles.line = plot (x, у);

guidata(gcbo, handles);

% Связывание контекстного меню cmLine с линией графика

set(handles.line, 'UIContextMenu', handles.cmLine)

Запустите приложение mygui, постройте линию любым из доступных способов и убедитесь, что щелчок правой кнопкой мыши по линии приводит к появлению контекстного меню с пунктами синий, красный, зеленый. Выбор пунктов не приводит к изменению цвета линии, очевидно, что следует запрограммировать событие Callback каждого пункта.

Программирование контекстного меню

Обработка событий Callback пунктов контекстного меню производится аналогично программированию меню приложения. Установите в редакторе меню для пунктов cmLineBlue, cmLineRed, cmLineGreen соответственно вызовы:

mygui('cmLineBlue_Callback',gcbo,[ ],guidata(gcbo))

mygui('cmLineRed_Callback',gcbo,[],guidata(gcbo)) mygui('cmLineGreen_Callback',gcbo,[],guidata(gcbo))

а в файле mygui.m опишите данные подфункции в соответствии с листингом 14.

Листинг 14. Программирование контекстного меню

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

Запрограммированное и связанное с линией контекстное меню разрешает быстрый доступ пользователя к цвету линии. Осталось обеспечить согласованную работу контекстного меню со списком Цвет линии с именем pmColor. Выбор цвета из меню должен приводить не только к изменению цвета линии, но и к появлению соответствующей строки в раскрывающемся списке. В каждую подфункцию обработки события Callback пункта контекстного меню следует добавить операторы, устанавливающие нужное значение (1, 2 или 3) свойства value раскрывающегося списка (листинг 15).

Листинг 15. Согласованная работа меню и списка выбора цвета

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

set(handles.pmColor, 'Value', 1)

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

set(handles.pmColor, 'Value', 2)

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

set(handles.pmColor, 'Value', 3)

Задание на лабораторную работу

Цель данной лабораторной работы - изучение основных принципов создания приложений в пакете MATLAB 6.x и основ программирования событий от элементов интерфейса.

Постановка задачи.. Необходимо при помощи пакета MATLAB создать приложение, окно которого содержит следующие элементы: оси, три кнопки, два поля ввода текста.

В одно из текстовых полей вводится функция, в другое – количество членов, которые нужно получить из разложения данной функции в ряд Тейлора. Нажатие на одну кнопку позволяет получить график исходной функции. Нажатие на вторую кнопку позволяет получить график суммы заданного количества членов ряда Тейлора и добавить его к ранее построенным графикам. Графики должны иметь разный цвет. Нажатие на третью кнопку приводит к очистке окна, в которое выводятся графики.