Построение графического интерфейса в системе Matlab

Построение графического интерфейса в системе Matlab

Введение

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

    математика и вычисления;

    разработка алгоритмов;

    вычислительный эксперимент, имитационное моделирование, макетирование;

    анализ данных, исследование и визуализация результатов;

    научная и инженерная графика;

    разработка приложений, включая графический интерфейс пользователя.

Основным объектом при программировании в среде Matlab является массив, для которого не требуется указывать размерность явно. Это позволяет решать многие вычислительные задачи, связанные с векторно-матричными формулировками.

Система Matlab – это одновременно и операционная среда и язык программирования. Пользователь может написать специализированные функции и программы, которые оформляются в виде М-файлов. По мере увеличения количества созданных программ возникают проблемы их классификации и тогда можно попытаться собрать родственные функции в специальные папки. Это приводит к концепции пакетов прикладных программ, которые представляют собой коллекции М-файлов для решения определенной задачи или проблемы.

Cреда системы Matlab

Среда системы Matlab это совокупность интерфейсов, через которые пользователь поддерживают связь этой системой. Это: диалог посредством командной строки или графического интерфейса, просмотр рабочей области, редактор и отладчик М-файлов, работа с файлами и оболочкой DOS, экспорт и импорт данных, интерактивный доступ к справочной информации, динамическое взаимодействие с внешними системами Microsoft Word, Microsoft Excel и др. Реализуются эти интерфейсы через командное окно, инструментальную панель, системы просмотра рабочей области и путей доступа, редактор / отладчик М-файлов, специальные меню.

Пользовательский интерфейс носит дружественный характер и построен с учетом устоявшихся принципов программного обеспечения, разрабатываемого для операционной системы Windows.

В системе Matlab существует два вида м-файлов:

    скрипты – представляют последовательности команд (представляют собой процедуры);

    function – представляют собой функции с входными аргументами и выходными параметрами (значениями функции).

Но далее возникает необходимость многократного запуска файла программы при других, изменённых параметрах решаемой задачи. Возникает неудобство: в постоянном редактировании исходного текста программы и повторном или очередном её запуске. При этом важен механизм управления переменными, который бы обеспечивал удобный интерфейс между программой и пользователем. При решении других задач могут возникнуть трудности с визуализацией какого-либо процесса, то есть некоторая переменная изменяться динамически в процессе решения поставленной задачи.

Все эти и другие трудности, возможно, решить при использовании графического интерфейса пользователя. (GUI – Graphical User Interface)

Основные принципы построения графического интерфейса

Использование графического интерфейса позволяет пользователю сделать программу более универсальной.

Как и любой процесс проектирования, процесс построения графического интерфейса пользователя можно разбить на следующие этапы:

1. Постановка задачи,

2. Создание формы интерфейса и создание на неё элементов управления.

3. Написание кода программы и кода обработки событий.

Этапы построения графического интерфейса пользователя

1. На первом этапе проводиться анализ поставленной задачи и определяется количество и состав элементов управления необходимых для решения задачи.

2. На втором этапе создаётся форма графического интерфейса и на ней создаются и размещаются элементы управления. Здесь же описываются их свойства.

Задавать расположение и выравнивать элементы на форме описывать их свойства можно 'вручную', но для удобства и быстроты используют редактор выравнивания объектов (The Alignment Tool) и редактора свойств (The Property Editor).

Существует два способа создания формы и элементов управления, а так же задания или изменения их свойств:

    использование команды WORKSPACE (то есть использование команды операционной среды MATLAB).

    использование средств панели инструментов – совокупности средств для быстрого создания GUI (The Control Panel).

При построении элементов управления первым способом удобно использовать скрипт-файл, в котором последовательно с помощью команд WARKSPACE описывается создание элементов управления и устанавливаются их свойства.

Эти команды можно использовать как для написания кода, создающего графический интерфейс пользователя, так и использовать для управления свойствами элементов управления из тела m-файлов. Благодаря чему мы можем получить визуализацию нашего процесса вычисления.

На практике всё более склоняются ко второму способу создания графического интерфейса с элементами управления. Это объясняется тем, что при использовании панели управления с её редакторами свойств, событий, выравнивания очень удобно работать, и создавать GUI значительно быстрее, чем в первом случае.

3. На третьем этапе создания графического интерфейса пользователя (GUI) пишется код основной программы вычисления и код для обработки событий.

Код основной программы вычисления, пишется на языке программирования операционной среды Matlab, в виде m-файла. Созданные m-файлы закрепляются за событием какого-нибудь элемента управления или формы.

При описании свойств элементов управления события описываются в m-файле:

а) либо при создании каждого элемента управления описываем его свойства и сразу описываем действие событие;

б) либо описываем обработку события для каждого элемента при помощи редактора событий (The Property Editor).

Начало выполнения действий по созданию графического интерфейса

Редактор GUIDE (руководство) вызывается командой guide из командного окна или путем выполнения цепочки команд главного меню File (Файл) – New (Новый) – GUI (Графический Интерфейс).

Две странички, присутствующие на стартовой заставке (рис. 1), позволяют начать проектирование нового интерфейса (вкладка – Create New GUI, (Создать новый интерфейс)) или воспользоваться ранее созданным интерфейсом (вкладка – Open Existing GUI (Открыть существующий интерфейс)). Дело в том, что описание формы приложения вместе с расположенными на ней интерфейсными компонентами может быть сохранено в файле с расширением fig. Если на диске хранится нечто похожее на наше будущее приложение, существующим файлом можно воспользоваться с целью экономии времени.

Начальная конструктора графического интерфейса (GUIDE) (рис. 1)

Мне было предложено рассмотреть приложение, воспроизводящее график одной из пяти функций в зависимости от выбранной строки раскрывающегося меню.

Окно редактирования формы (рис. 2)

После редактирование необходимо сохранить полученный проект. Для этого нажимаем: File–Save as и сохраняем проект в нужную папку на диске. После этого откроется окно следующего содержания:

Окно редактирования m-кода формы (рис. 3)

Это код, описывающий поведение сохраненной нами формы. В нем содержатся процедуры и функции, которые позволяют форме быть работоспособной.

Окно программы, запущенной на выполнение (рис. 4)

Вот получена работоспособная программа, которая выполняет выведение различных графических зависимостей на координатной плоскости.

Выбирая различные пункты в выпадающем меню, а затем, нажимая кнопку, вы увидите различные варианты получаемых графиков.

Алгоритм создания интерфейса

1. Вызвать панель управления.

    Создать новую форму интерфейса или загрузить существующую.

    Перейти в режим редактирования формы.

    Натаскать на форму необходимые элементы управления.

2. Вызвать редактор свойств.

    Выбрать элемент управления.

    Выбрать нужное свойство и изменить его.

3. Вызвать редактор событий.

    Выбрать элемент управления.

    Написать код обработки события.

4. Вызвать редактор выравнивания объектов.

    Выбрать элемент управления иди группу элементов.

    Выбрать метод выравнивания.

5. Перейти в окно панели управления и активизировать интерфейс.

Литература

1. Дьяконов, В.П. MATLAB 6.5 SP1/7 + Simulink 5/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. Ермачкова Ю.А. Проектирование интерфейса в среде GUIDE MATLAB / Ю.А. Ермачкова // Современные информационные технологии в экономике, управлении и образовании. Сборник материалов межвузовской научно-практической конференции, посвященной 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)».

%

% 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);

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