- •Принципы создания графических интерфейсов
- •Постановка задачи
- •3. Среда guide
- •3.2. Конструирование интерфейса
- •3.3. Работа над приложением
- •3.4. Программирование элементов интерфейса
- •3.5. Диалоговые окна и меню приложения
- •Пример графического интерфейса пользователя
- •Листинг исходного кода приложения
-
Пример графического интерфейса пользователя
На рисунке 8 приведён пример графического интерфейса программы выполненной в ходе лабораторной работы.
Рис. 8. Графический интерфейс пользователя
-
Листинг исходного кода приложения
5.1 Листинг guiformj.m
function varargout = guiform(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @guiform_OpeningFcn, ...
'gui_OutputFcn', @guiform_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 guiform_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
optionsList = [ handles.rbMarkNone handles.rbMarkSq handles.rbMarkCirc ];
optionsValues = [ 'n' 's' 'o' ];
colors = ['b', 'r', 'g' ];
setappdata(hObject, 'colors', colors);
setappdata(hObject, 'optionsList', optionsList);
setappdata(hObject, 'optionsValues', optionsValues);
function varargout = guiform_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function BtnPlot_Callback(hObject, eventdata, handles)
plotDialog(hObject, handles)
set(hObject,'Enable','off');
set(handles.clear,'Enable','on');
function clear_Callback(hObject, eventdata, handles)
plotClearDialog(hObject, handles)
function chbxGridX_Callback(hObject, eventdata, handles)
set(handles.axMain, 'XGrid', mapValue(hObject, 'Value'))
function chbxGridY_Callback(hObject, eventdata, handles)
set(handles.axMain, 'YGrid', mapValue(hObject, 'Value'))
function rbMarkCirc_Callback(hObject, eventdata, handles)
switchMarkers(hObject, handles);
changeMarker(handles)
function rbMarkNone_Callback(hObject, eventdata, handles)
switchMarkers(hObject, handles);
changeMarker(handles)
function rbMarkSq_Callback(hObject, eventdata, handles)
switchMarkers(hObject, handles);
changeMarker(handles)
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)
title(get(hObject, 'String'))
function editTitle_ButtonDownFcn(hObject, eventdata, handles)
title(get(handles.editTitle, 'String'))
function pmColor_Callback(hObject, eventdata, handles)
changeColor(handles)
function widthSlider_CreateFcn(hObject, eventdata, handles)
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor',[.9 .9 .9]);
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function widthSlider_Callback(hObject, eventdata, handles)
try
thePlot = getappdata(handles.axMain, 'plot');
set(thePlot, 'LineWidth', round(get(hObject, 'value')))
catch
;
end
function figure1_CreateFcn(hObject, eventdata, handles)
function pmColor_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function cmLineBlue_Callback(hObject, eventdata, handles)
set(handles.pmColor, 'Value', 1)
changeColor(handles)
function cmLineRed_Callback(hObject, eventdata, handles)
set(handles.pmColor, 'Value', 2)
changeColor(handles)
function cmLineGreen_Callback(hObject, eventdata, handles)
set(handles.pmColor, 'Value', 3)
changeColor(handles)
function mnGraphPlot_Callback(hObject, eventdata, handles)
plotDialog(hObject, handles)
set(handles.mnGraphPlot,'Enable','off');
set(handles.mnGraphClear,'Enable','on');
set(handles.BtnPlot,'Enable','off');
set(handles.clear,'Enable','on');
function mnGraphClear_Callback(hObject, eventdata, handles)
plotClearDialog(hObject, handles)
function mnGraph_Callback(hObject, eventdata, handles);
function userFunction_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
5.2 Листинг changeColor.m
function changeColor(handles)
try
thePlot = getappdata(handles.axMain, 'plot');
colors = getappdata(handles.figure1, 'colors');
set(thePlot, 'Color', colors(get(handles.pmColor, 'value')))
catch
;
end
5.3 Листинг changeMarker.m
function changeMarker(handles)
try
thePlot = getappdata(handles.axMain, 'plot');
markers = getappdata(handles.figure1, 'optionsValues');
set(thePlot, 'Marker', markers(getMarkerValue(handles)))
catch
;
end
5.4 Листинг getMarkerValue.m
function markerValue = getMarkerValue(handles)
markerValue = getSelectedOption(getappdata(handles.figure1, 'optionsList'));
5.5 Листинг getSelectedOption.m
function index = getSelectedOption(hObjectList)
index = 1;
for counter = (1 : length(hObjectList))
if get(hObjectList(counter), 'value') == 1
index = counter;
return
end
end
5.6 Листинг drawPlot.m
function drawPlot(xVector, yVector, handles)
newPlot = plot(xVector, yVector);
setappdata(handles.axMain, 'plot', newPlot);
changeMarker(handles)
changeColor(handles)
title(get(handles.editTitle, 'String'))
set(newPlot, 'LineWidth', round(get(handles.widthSlider, 'value')))
set(newPlot, 'UIContextMenu', handles.cmLine)
5.7 Листинг mapValue.m
function retval = mapValue(hObject, property)
if get(hObject, property)
retval = 'On';
else
retval = 'Off';
end
5.8 Листинг switchOptions.m
function switchOptions(hObjectList, hObject, handles)
for counter = hObjectList(1, 1:length(hObjectList))
if counter == hObject
set(hObject, 'value', 1);
else
set(counter, 'value', 0);
end
end
5.9.1 Листинг plotDialog.m
function plotDialog(hObject, handles)
default = 'По умолчанию';
fromFile = 'Из файла';
userInput = 'Пользовательский ввод';
errorMessage = 'Неизвестный формат файла с данными';
errorCaption = 'Ошибка!';
dialogCaption = 'Источник данных';
dataFile = 'files\data.mat';
result = questdlg(dialogCaption, 'mygui', default, fromFile, userInput, default);
if strcmp(result, fromFile)
try
load(dataFile);
catch
errordlg(errorMessage, errorCaption)
end
arraySize = size(mymatrix);
if(ndims(mymatrix) ~= 2 | ~isnumeric(mymatrix))
errordlg(errorMessage, errorCaption)
end
x = mymatrix;
y = exp(-mymatrix.^2);
end
if strcmp(result, userInput)
try
x = [ -2.5 : 0.6 : 2 ];
y = sym(get(handles.userFunction, 'String'));
y = subs(y);
catch
errordlg('Ошибка разбора пользовательской функции', errorCaption)
end
end
if strcmp(result, default)
x = [ -2.5 : 0.6 : 2 ];
y = exp(-x.^2);
end
drawPlot(x, y, handles)
set(handles.axMain, 'YGrid', mapValue(handles.chbxGridY, 'Value'))
set(handles.axMain, 'XGrid', mapValue(handles.chbxGridX, 'Value'))
5.9.2 Листинг plotClearDialog.m
function plotClearDialog(hObject, handles)
yesButton = 'Да';
noButton = 'Нет';
message = 'Очистить график';
button = questdlg(message, 'mygui', yesButton, noButton, noButton);
if strcmp(button, yesButton)
cla
set(handles.axMain, 'YGrid', mapValue(handles.chbxGridY, 'Value'))
set(handles.axMain, 'XGrid', mapValue(handles.chbxGridX, 'Value'))
set(handles.mnGraphClear,'Enable','off');
set(handles.mnGraphPlot,'Enable','on');
set(handles.clear,'Enable','off');
set(handles.BtnPlot,'Enable','on');
end