на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Создание графического интерфейса пользователя
p align="left">cla % очистка осей

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

set(hObject, 'Enable', 'off')

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

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

Сохраните изменения в редакторе М-файлов. Запустите приложение mygui и убедитесь, что всегда доступной является только одна из кнопок Построить или Очистить, что является хорошей подсказкой для пользователя о возможных действиях. Закройте окно приложения и редактор приложений.

Работа над приложением

Запуск приложения

Запуск приложения осуществляется не только из редактора приложений. Для запуска приложения достаточно в качестве команды задать его имя в командной строке

>>mygui

Появляется окно приложения, обращение к элементам интерфейса окна приводит к соответствующим действиям.

Каталог с приложением должен содержаться в путях поиска MatLab или являться текущим.

Оформление интерфейса

Часто требуется, чтобы небольшое перемещение мыши вызывало изменение положения объекта на некоторый фиксированный шаг. Сетка редактора приложений позволяет осуществить такое дискретное движение. Выбор пункта Grid and Rulers меню Tools приводит к появлению диалогового окна Grid and Rulers, изображенного на рис. 5.

Рис. 5. Диалоговое окно Grid and Rulers

Флаги Show rulers и Show grid соответствуют отображению линеек и сетки в редакторе приложений, а раскрывающийся список Grid Size позволяет выбрать размер ячеек сетки. Минимально допустимый размер -десять пикселов - позволяет достаточно точно располагать элементы управления в окне приложений. Привязка перемещения к линиям сетки происходит при установленном флаге Snap to grid. Привязка разрешает разместить объект и изменить его размеры только при условии прохождения границы объекта по линиям сетки. Выбор мелкого шага сетки в сочетании с привязкой предоставляет разработчику возможность быстро оформить приложение. Плавно изменять положение выделенного объекта можно при помощи клавиш со стрелками. Одновременное удержание <Ctrl> приводит к перемещению с учетом привязки к сетке.

Программирование элементов интерфейса

Флаги и рамки

Флаги позволяют произвести одну или несколько установок, определяющих ход работы приложения. Продолжите работу над mygui, предоставив пользователю возможность наносить линии сетки на график. Окно приложения должно содержать два флага с названиями сетка по х и сетка по у. Если пользователь нажимает кнопку Построить, то на оси наносится сетка по выбранным координатам. Нажатие на Очистить должно приводить не только к исчезновению графика функции, но и скрытию сетки.

Обычно несколько элементов управления со схожим назначением группируются и помещаются внутри рамки. Измените размеры осей, освободив справа место для рамки. Нанесите рамку на окно приложения при помощи соответствующей кнопки. В рамку добавьте два флага. Разместите поясняющие подписи рядом с флагами и дайте им имена. Задайте свойству Tag верхнего флага значение chbxGridx, а свойству string, отвечающему за подпись флага, значение Сетка по х.

Аналогичным образом определите свойства нижнего флага, установите свойство Tag в chbxGridY, и свойство string в сетка по у. Если текст не помещается рядом с флагом, увеличьте ширину области флага при помощи мыши, удерживая нажатой левую кнопку. Сохраните приложение в редакторе приложений для автоматического создания в редакторе М-файлов заготовок для подфункций обработки события добавленных объектов.

Осталось сделать так, чтобы при нажатии пользователем кнопки Построить происходило отображение линий сетки в зависимости от установленных флагов, а нажатие на Очистить приводило к скрытию сетки. Блок обработки события Callback кнопки Построить следует дополнить проверкой состояния флагов. Свойство флага value принимает значение логической единицы при включении флага пользователем, и, соответственно, равно нулю, если флаг выключен. Указатели на флаги содержатся в полях chbxGridX и chbxGridY структуры handles. Состояние флагов определяет значение свойств XGrid и YGrid осей.

Произведите необходимые изменения в подфункции обработки события Callback кнопки Построить с именем btnPlot (листинг 5).

Листинг 5. Обработка события кнопки btnPlot с учетом состояния флагов

function btnPlot_Callback(hObject, eventdata, handles)

% Построение графика функции

x=[-2:0.2:2];

y=exp(-x.^2);

plot (x,y)

%Проверка флага сетка по х

if get(handles.chbxGridX, 'Value')

% Флаг включен, следует добавить линии сетки

set(gca, 'XGrid', 'on')

else

% Флаг выключен, следует убрать линии сетки

set(gca, 'XGrid', 'off')

end

% Проверка флага сетка по х

if get(handles.chbxGridY, 'Value')

% Флаг включен, следует добавить линии сетки

set(gca, 'YGrid', 'on')

else

% Флаг выключен, следует убрать линии сетки

set(gca, 'YGrid', 'off')

end

% Кнопка Построить должна стать недоступной после вывода графика

set(hObject, 'Enable', 'off')

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

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

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

Переключатели

Переключатели обычно группируются по их предназначению, и пользователь может выбрать только одну опцию. Всегда установлен единственный переключатель из группы. Обработка событий переключателя должна влиять на состояние остальных переключателей всей группы. Модернизируйте интерфейс приложения mygui, предоставьте пользователю возможность выбирать тип маркера (кружок, квадрат или отсутствие маркера).

Добавьте в окно приложения новую рамку и нанесите на нее три переключателя, установите свойствам Tag значения rbMarkcirc, rbMarkSq, rbMarkNone, a String - маркеры-круги, маркеры-квадраты, без маркеров соответственно (рис. 6).

Состояние переключателя определяется его свойством value: если value равно единице, то переключатель включен, ноль - нет. Задайте в редакторе свойств значение 1 свойству value переключателя с надписью без маркеров, он будет включен при запуске программы. Значение свойства Value в версии MatLab 6.x устанавливается следующим образом. Выделите переключатель и перейдите к его свойствам. В редакторе свойств нажмите кнопку в строке с Value. Появляется окно Value, изображенное на рис. 7.

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

Листинг 6. Выбор типа маркеров

function btnPlot_Callback(hObject, eventdata, handles)

% Построение графика функции

x=[-2:0.2:2];

y=exp(-x.^2);

handles.line = plot (x,y)

guidata(gcbo,handles)

function rbMarkcirc_Callback(hObject, eventdata, handles)

% Устанавливаем маркеры-круги

set(handles.line, 'Marker', 'o')

% Переключатель Маркеры-квадраты должен быть выключен

set(handles.rbMarkSq, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkNone, 'Value',0)

function rbMarkSq_Callback(hObject, eventdata, handles)

% Устанавливаем маркеры-квадраты

set(handles.line,'Marker','s')

% Переключатель Маркеры-круги должен быть выключен

set(handles.rbMarkcirc, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkNone, 'Value',0)

function rbMarkNone_Callback(hObject, eventdata, handles)

% Устанавливаем оттображение графика без маркеров

set(handles.line,'Marker','none')

% Переключатель Маркеры-круги должен быть выключен

set(handles.rbMarkcirc, 'Value',0)

% Переключатель Без маркеров должен быть выключен

set(handles.rbMarkSq, 'Value', 0)

Рис. 6 Добавление группы переключателей

Рис. 7 Окно Value для установки значения

Списки

Модернизируйте интерфейс приложения mygui, предоставьте пользователю возможность выбора цвета линии графика из раскрывающегося списка (синий, красный, зеленый). Перейдите в режим редактирования и добавьте при помощи панели управления раскрывающийся список (рис. 8). В редакторе свойств установите свойство Tag в значение 'pmColor'.

Рис. 8. Добавление раскрывающегося списка

Элементами раскрывающегося списка являются строки, которые вводятся в редакторе свойств. Нажмите кнопку в строке со свойством String раскрывающегося списка, появляется окно String. Наберите в нем строки "синий", "красный", "зеленый" (без кавычек), разделяя их при помощи клавиши <Enter> (рис. 9).

Рис. 9. Окно String

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

Обработка события Callback раскрывающегося списка состоит в определении выбора пользователя и соответствующем изменении цвета линии. Свойство списка value содержит номер выбранной строки (строки списка нумеруются с единицы). Перейдите к подфункции pmColor_Callback и запрограммируйте обработку выбора цвета линии пользователем. Используйте оператор switch для установки цвета линии в зависимости от номера выбранной строки списка.

Листинг 7. Изменение цвета линии

function pmColor_Callback(hObject, eventdata, handles)

Num=get(hObject, 'Value');

switch Num

case 1

% Устанавливаем синий цвет линии

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

case 2

% Устанавливаем красный цвет линии

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

case 3

% Устанавливаем зеленый цвет линии

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

end

Полосы скроллинга

Усовершенствуйте интерфейс приложения mygui, предоставив пользователю возможность устанавливать ширину линии при помощи полосы скроллинга. Добавьте полосу скроллинга в окно приложения и задайте название scrWidth в свойстве Tag полосы. Снабдите полосу скроллинга текстовым пояснением "Толщина линии" так же, как и раскрывающийся список (рис. 10).

Рис. 10. Окно с полосой скроллинга

Теперь следует определить соответствие между положением бегунка полосы и числовым значением свойства value.

Выполните следующие установки из редактора свойств.

1.В Mах занесите десять, а в Min - единицу. Свойства Mах и Min полосы скроллинга отвечают за границы значений, записываемых в value, при перемещении бегунка.

2.Определите начальное положение, записав в value единицу. Нажмите кнопку в строке с названием свойства и в появившемся окне Value измените значение на единицу.

3.Обратитесь к свойству Sliderstep. Его значением является вектор из двух компонентов, первый из которых определяет относительное изменение value при нажатии на кнопки со стрелками полосы скроллинга, а второй - при перетаскивании бегунка мышью. Следует установить значение [0.1 0.2] свойства Sliderstep для того, чтобы нажатие на кнопки полосы изменяло value на десять процентов, а щелчок мыши справа или слева от бегунка на двадцать. Раскройте строку Sliderstep щелчком мыши по знаку плюс слева от названия свойства и в появившихся строках х и у введите 0.1 и 0.2 (рис. 11).

Осталось запрограммировать событие Callback полосы скроллинга с именем scrWidth, которое состоит в задании ширины линии, равной округленному значению value. Перейдите к подфункции scrWidth_Callback и добавьте в ней оператор установки ширины линии

Рис. 11. SliderStep

Листинг 8. Изменение толщины линии

function scrWidth_Callback(hObject, eventdata, handles)

% Получаем текущее значение value скроллбара

w = get(hObject,'Value');

% Устанавливаем в качестве толщины линии округленное значение value set(handles.line,'LineWidth',round(w));

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.