49943 (597467), страница 4

Файл №597467 49943 (Создание графического интерфейса пользователя) 4 страница49943 (597467) страница 42016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

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 создать приложение, окно которого содержит следующие элементы: оси, три кнопки, два поля ввода текста.

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


Заключение

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

В Приложении приведен образец лабораторной работы по дисциплине «Автоматизация инженерных вычислений». Работа направлена на изучение основных принципов создания приложений в пакете MATLAB 6.x и основ программирования событий от элементов интерфейса.

Приложение

function varargout = mygui(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @mygui_OpeningFcn, ...

'gui_OutputFcn', @mygui_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin & isstr(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

% --------------------------------------------------------------------

function mygui_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

% --------------------------------------------------------------------

function varargout = mygui_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

% --------------------------------------------------------------------

function btnPlot_Callback(hObject, eventdata, handles)

% Выводим диалоговое окно для выбора вырианта получения исходных данных

button = questdlg('Данные','mygui','По умолчанию','Из файла','По умолчанию');

% Выбран вариант "Из файла"

if strcmp(button, 'Из файла')

try

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

Mas = load('data.txt');

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

SMas = size(Mas);

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

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

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

else

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

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

guidata(gcbo, handles);

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

end

catch

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

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

end

else

% Выбран выриант "По умолчанию"

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

x=[-2:0.2:2];

y=exp(-x.^2);

handles.line = plot (x,y);

guidata(gcbo,handles);

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

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

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

end

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

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

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

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

% Пункт меню График->Построить должен стать недоступным

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

% Пункт меню График->Очистить должен стать доступным

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

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

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

% Переключатель Маркеры-квадраты должен стать доступным

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

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

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

% Список Цвет линии должен стать доступным

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

% Скроллбар Толщина линии должен стать доступным

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

% Заголовок графика из текстового поля

title(get(handles.editTitle,'String'))

% --------------------------------------------------------------------

function btnClear_Callback(hObject, eventdata, handles)

% Выводим диалоговое окно

button = questdlg('Очистить оси?','mygui');

% Если выбрано "Yes"

if strcmp(button, 'Yes')

% очистка осей

cla

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

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

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

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

% Убираем сетку

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

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

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

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

% Переключатель Маркеры-квадраты должен стать недоступным

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

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

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

% Список Цвет линии должен стать недоступным

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

% Скроллбар Толщина линии должен стать недоступным

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

% Убираем заголовок графика

title('')

% Пункт меню График->Построить должен стать доступным

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

% Пункт меню График->Очистить должен стать недоступным

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

end

% --------------------------------------------------------------------

function chbxGridx_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function chbxGridY_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------

function chbxGridX_Callback(hObject, eventdata, 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)

% --------------------------------------------------------------------

function pmColor_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

% --------------------------------------------------------------------

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

% --------------------------------------------------------------------

function scrWidth_CreateFcn(hObject, eventdata, handles)

usewhitebg = 1;

if usewhitebg

set(hObject,'BackgroundColor',[.9 .9 .9]);

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

% --------------------------------------------------------------------

function scrWidth_Callback(hObject, eventdata, handles)

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

w = get(hObject,'Value');

% Устанавливаем в качестве толщины линее округленное значение скроллбара

Характеристики

Тип файла
Документ
Размер
31,97 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее