Смекни!
smekni.com

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


Заключение

Следует отметить, что среда 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');

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

set(handles.line,'LineWidth',round(w));

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

function editTitle_CreateFcn(hObject, eventdata, handles)

if ispc

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

else

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

end

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

function editTitle_Callback(hObject, eventdata, handles)

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

function mnGraph_Callback(hObject, eventdata, handles)

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

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')

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

function cmLine_Callback(hObject, eventdata, handles)

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

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)


Список литературы

1. Ануфриев И.Е. Самоучитель Matlab 5.3/6.x – СПб.: БХВ-Петербург, 2003.-736с.: ил.

2. В.П.Дьяконов MATLAB 6.5 SPI/7 + Simulink 5/6 в математике и моделировании. Серия «Библиотека профессионала». – М.: СОЛОН-Пресс, 2005. – 576 с.: ил.

3. Ануфриев И.Е. , Смирнов А.Б. , Смирнова Е.Н. MathLab 7. – СПб. : БХВ-Петербург,2005. – 1104 с.: ил.

СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ В MATLAB Методические указания к лабораторной работе по дисциплине «Автоматизация инженерных вычислений» / сост. И.А.Селиванова. Екатеринбург: ГОУ ВПО УГТ-УПИ, 2006. 34 с.