Построение графического интерфейса в системе Matlab
Введение
Matlab– это система инженерных и научных вычислений. Она обеспечивает математические вычисления, визуализацию научной графики программирование и моделирование процессов с использованием интуитивно понятной среды окружения, когда задачи и их решения могут быть представлены в нотации, близкой кматематической. Наиболее известные области применения системы Matlab:
математика и вычисления;
разработка алгоритмов;
вычислительный эксперимент, имитационное моделирование, макетирование;
анализ данных, исследование и визуализация результатов;
научная и инженерная графика;
разработка приложений, включая графический интерфейс пользователя.
Основным объектом при программировании в среде Matlabявляется массив, для которого не требуется указывать размерность явно. Это позволяет решать многие вычислительные задачи, связанные с векторно-матричными формулировками.
Система Matlab– это одновременно и операционная среда и язык программирования. Пользователь может написать специализированные функции и программы, которые оформляются в виде М-файлов. По мере увеличения количества созданных программ возникают проблемы их классификации и тогда можно попытаться собрать родственные функции в специальные папки. Это приводит к концепции пакетов прикладных программ, которые представляют собой коллекции М-файлов для решения определенной задачи или проблемы.
Cредасистемы Matlab
Среда системы Matlabэто совокупность интерфейсов, через которые пользователь поддерживают связь этой системой. Это: диалог посредством командной строки или графического интерфейса, просмотр рабочей области, редактор и отладчик М-файлов, работа с файлами и оболочкой DOS, экспорт и импорт данных, интерактивный доступ к справочной информации, динамическое взаимодействие с внешними системами MicrosoftWord, MicrosoftExcelи др. Реализуются эти интерфейсы через командное окно, инструментальную панель, системы просмотра рабочей области и путей доступа, редактор / отладчик М-файлов, специальныеменю.
Пользовательский интерфейс носит дружественный характер и построен с учетом устоявшихся принципов программного обеспечения, разрабатываемого для операционной системы Windows.
В системе Matlabсуществует два вида м-файлов:
скрипты – представляют последовательности команд (представляют собой процедуры);
function– представляют собой функции с входными аргументами и выходными параметрами (значениями функции).
Но далее возникает необходимость многократного запуска файла программы при других, изменённых параметрах решаемой задачи. Возникает неудобство: в постоянном редактировании исходного текста программы и повторном или очередном её запуске. При этом важен механизм управления переменными, который бы обеспечивал удобный интерфейс между программой и пользователем. При решении других задач могут возникнуть трудности с визуализацией какого-либо процесса, то есть некоторая переменная изменяться динамически в процессе решения поставленной задачи.
Все эти и другие трудности, возможно, решить при использовании графического интерфейса пользователя. (GUI– GraphicalUserInterface)
Основные принципы построения графического интерфейса
Использование графического интерфейса позволяет пользователю сделать программу более универсальной.
Как и любой процесс проектирования, процесс построения графического интерфейса пользователя можно разбить на следующие этапы:
1. Постановка задачи,
2. Создание формы интерфейса и создание на неё элементов управления.
3. Написание кода программы и кода обработки событий.
Этапы построения графического интерфейса пользователя
1. На первом этапе проводиться анализ поставленной задачи и определяется количество и состав элементов управления необходимых для решения задачи.
2. На втором этапе создаётся форма графического интерфейса и на ней создаются и размещаются элементы управления. Здесь же описываются их свойства.
Задавать расположение и выравнивать элементы на форме описывать их свойства можно 'вручную', но для удобства и быстроты используют редактор выравнивания объектов (TheAlignmentTool) и редактора свойств (ThePropertyEditor).
Существует два способа создания формы и элементов управления, а так же задания или изменения их свойств:
использование команды WORKSPACE(то есть использование команды операционной среды MATLAB).
использование средств панели инструментов – совокупности средств для быстрого создания GUI(TheControlPanel).
При построении элементов управления первым способом удобно использовать скрипт-файл, в котором последовательно с помощью команд WARKSPACEописывается создание элементов управления и устанавливаются их свойства.
Эти команды можно использовать как для написания кода, создающего графический интерфейс пользователя, так и использовать для управления свойствами элементов управления из тела m-файлов. Благодаря чему мы можем получить визуализацию нашего процесса вычисления.
На практике всё более склоняются ко второму способу создания графического интерфейса с элементами управления. Это объясняется тем, что при использовании панели управления с её редакторами свойств, событий, выравнивания очень удобно работать, и создавать GUIзначительно быстрее, чем в первом случае.
3. На третьем этапе создания графического интерфейса пользователя(GUI) пишется код основной программы вычисления и код для обработки событий.
Код основной программы вычисления, пишется на языке программирования операционной среды Matlab, в виде m-файла. Созданные m-файлы закрепляются за событием какого-нибудь элемента управления или формы.
При описании свойств элементов управления события описываются в m-файле:
а) либо при создании каждого элемента управления описываем его свойства и сразу описываем действие событие;
б) либо описываем обработку события для каждого элемента при помощи редактора событий (ThePropertyEditor).--PAGE_BREAK--
Начало выполнения действий по созданию графического интерфейса
Редактор GUIDE(руководство) вызывается командой guideиз командного окна или путем выполнения цепочки команд главного меню File(Файл) – New(Новый) – GUI(Графический Интерфейс).
Две странички, присутствующие на стартовой заставке (рис. 1), позволяют начать проектирование нового интерфейса (вкладка – CreateNewGUI, (Создать новый интерфейс)) или воспользоваться ранее созданным интерфейсом (вкладка – OpenExistingGUI(Открыть существующий интерфейс)). Дело в том, что описание формы приложения вместе с расположенными на ней интерфейсными компонентами может быть сохранено в файле с расширением fig. Если на диске хранится нечто похожее на наше будущее приложение, существующим файлом можно воспользоваться с целью экономии времени.
/>
Начальная конструктора графического интерфейса (GUIDE) (рис. 1)
Мне было предложено рассмотреть приложение, воспроизводящее график одной из пяти функций в зависимости от выбранной строки раскрывающегося меню.
/>
Окно редактирования формы (рис. 2)
После редактирование необходимо сохранить полученный проект. Для этого нажимаем: File–Saveasи сохраняем проект в нужную папку на диске. После этого откроется окно следующего содержания:
/>
Окно редактирования m-кода формы (рис. 3)
Это код, описывающий поведение сохраненной нами формы. В нем содержатся процедуры и функции, которые позволяют форме быть работоспособной.
/>
Окно программы, запущенной на выполнение (рис. 4)
Вот получена работоспособная программа, которая выполняет выведение различных графических зависимостей на координатной плоскости.
Выбирая различные пункты в выпадающем меню, а затем, нажимая кнопку, вы увидите различные варианты получаемых графиков.
Алгоритм создания интерфейса
1. Вызвать панель управления.
Создать новую форму интерфейса или загрузить существующую.
Перейти в режим редактирования формы.
Натаскать на форму необходимые элементы управления.
2. Вызвать редактор свойств.
Выбрать элемент управления.
Выбрать нужное свойство и изменить его.
3. Вызвать редактор событий.
Выбрать элемент управления.
Написать код обработки события.
4. Вызвать редактор выравнивания объектов.
Выбрать элемент управления иди группу элементов.
Выбрать метод выравнивания.
5. Перейти в окно панели управления и активизировать интерфейс.
Литература
1. Дьяконов, В.П. MATLAB6.5 SP1/7 + Simulink5/6 в математике и моделировании / В.П. Дьяконов. – М.: СОЛОН-Пресс, 2005. – 576 с.
2. Дьяконов, В.П. MATLAB 6.5 SP1/7 + Simulink 5/6. Основы применения / В.П. Дьяконов – М.: СОЛОН-Пресс, 2005. – 800 с.
3. Дьяконов, В.П. MATLAB 6.5 SP1/7 + Simulink 5/6. Работа с изображениями и видеопотоками / В.П. Дьяконов. – М.: СОЛОН-Пресс, 2005. – 400 с.
4. Ермачкова Ю.А. Проектирование интерфейса в среде GUIDEMATLAB/ Ю.А. Ермачкова // Современные информационные технологии в экономике, управлении и образовании. Сборник материалов межвузовской научно-практической конференции, посвященной 175 – летию потребительской кооперации России и 5 – летию филиала. – М.: Информационно-внедренческий центр «Маркетинг», 2006. – С. 35–37.
Приложение
function varargout = kursovaya(varargin)
% KURSOVAYA M-file for kursovaya.fig
% KURSOVAYA, by itself, creates a new KURSOVAYA or raises the existing
% singleton*.
%
% H = KURSOVAYA returns the handle to a new KURSOVAYA or the handle to
% the existing singleton*.
%
% KURSOVAYA ('CALLBACK', hObject, eventData, handles,…) calls the local
% function named CALLBACK in KURSOVAYA.M with the given input arguments.
%
% KURSOVAYA ('Property', 'Value',…) creates a new KURSOVAYA or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before kursovaya_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to kursovaya_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose «GUI allows only one
% instance to run (singleton)». продолжение
--PAGE_BREAK--
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help kursovaya
% Last Modified by GUIDE v2.5 25-Dec-2009 17:53:25
% Begin initialization code – DO NOT EDIT
gui_Singleton = 1;
gui_State = struct ('gui_Name', mfilename,…
'gui_Singleton', gui_Singleton,…
'gui_OpeningFcn', @kursovaya_OpeningFcn,…
'gui_OutputFcn', @kursovaya_OutputFcn,…
'gui_LayoutFcn', [],…
'gui_Callback', []);
if nargin && ischar (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
% End initialization code – DO NOT EDIT
% – Executes just before kursovaya is made visible.
function kursovaya_OpeningFcn (hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to kursovaya (see VARARGIN)
% Choose default command line output for kursovaya
handles.output = hObject;
% Update handles structure
guidata (hObject, handles);
% This sets up the initial plot – only do when we are invisible
% so window can get raised using kursovaya.
if strcmp (get(hObject, 'Visible'), 'on')
F = @(t, x) 0; ode23tx (F, [0 10], 1);
end
% UIWAIT makes kursovaya wait for user response (see UIRESUME)
% uiwait (handles.figure1);
% – Outputs from this function are returned to the command line.
function varargout = kursovaya_OutputFcn (hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% – Executes on button press in pushbutton1.
function pushbutton1_Callback (hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes (handles.axes1);
cla;
popup_sel_index = get (handles.popupmenu1, 'Value');
switch popup_sel_index
case 1
F = @(t, x) 0; ode23tx (F, [0 10], 1)
case 2
F = @(t, x) t; ode23tx (F, [0 10], 1);
case 3
F = @(t, x) x; ode23tx (F, [0 10], 1);
case 4
F = @(t, x) – x; ode23tx (F, [0 10], 1);
case 5
F = @(t, x) 2*x-x^2; ode23tx (F, [0 10], 1);
end
% –
function FileMenu_Callback (hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% –
function OpenMenuItem_Callback (hObject, eventdata, handles)
% hObject handle to OpenMenuItem (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
file = uigetfile ('*.fig');
if ~isequal (file, 0)
open(file); продолжение
--PAGE_BREAK--
end
% –
function PrintMenuItem_Callback (hObject, eventdata, handles)
% hObject handle to PrintMenuItem (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
printdlg (handles.figure1)
% –
function CloseMenuItem_Callback (hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection = questdlg(['Close ' get (handles.figure1,'Name') '?'],…
['Close ' get (handles.figure1,'Name') '…'],…
'Yes', 'No', 'Yes');
if strcmp (selection, 'No')
return;
end
delete (handles.figure1)
% – Executes on selection change in popupmenu1.
function popupmenu1_Callback (hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get (hObject, 'String') returns popupmenu1 contents as cell array
% contents {get(hObject, 'Value')} returns selected item from popupmenu1
% – Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn (hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved – to be defined in a future version of MATLAB
% handles empty – handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal (get(hObject, 'BackgroundColor'), get (0,'defaultUicontrolBackgroundColor'))
set (hObject, 'BackgroundColor', 'white');
end
set (hObject, 'String', {'y(t)=const', 'y=1+t.^2./2', 'y=exp(t)', 'y=exp(-t)', 'y=2./(1+exp (-2*t))'});