Программирование событий в MATLAB

Изучение основ визуального программирования начнем на простейшем примере программы решения квадратного уравнения Программирование событий в MATLAB - student2.ru .

Очевидно, что исходными данными для такой задачи являются вещественные числа Программирование событий в MATLAB - student2.ru . Результатом ее решения станет пара корней уравне-

Программирование событий в MATLAB - student2.ru

Рис. 2.40.7. Окно с четырьмя компонентами.

Программирование событий в MATLAB - student2.ru

Рис. 2.40.8. Диалоговое окно выравнивания Align Objects.

Программирование событий в MATLAB - student2.ru

Рис. 2.40.9. Окно с четырьмя компонентами, выравненное по вертикали.

Программирование событий в MATLAB - student2.ru

Рис. 2.40.10. Окно с четырьмя компонентами, выравненное по горизонтали.

ния ( Программирование событий в MATLAB - student2.ru – при Программирование событий в MATLAB - student2.ru , Программирование событий в MATLAB - student2.ru , где Программирование событий в MATLAB - student2.ru – дискриминант), один корень ( Программирование событий в MATLAB - student2.ru – при условии Программирование событий в MATLAB - student2.ru ) или отсутствие корней (при Программирование событий в MATLAB - student2.ru , Программирование событий в MATLAB - student2.ru ).

Разместим в форме следующие компоненты:

1) Три окна редактирования ( Программирование событий в MATLAB - student2.ru ), которые служат для ввода значений коэффициентов квадратного уравнения ( Программирование событий в MATLAB - student2.ru );

2) Четыре метки ( Программирование событий в MATLAB - student2.ru ), первые три из которых служат для вывода подсказок a=, b=, c= для окон ввода значений переменных Программирование событий в MATLAB - student2.ru соответственно, а четвертая метка будет использоваться для вывода результатов;

3) кнопка, которая будет запускать процесс решения задачи, после того, как пользователь введет значения Программирование событий в MATLAB - student2.ru в окна редактирования.

В результате окно приложения примет вид, показанный на рис. 2.41.1.

Программирование событий в MATLAB - student2.ru

Рис. 2.41.1. Окно приложения после размещения на нем компонентов.

Компоненты являются объектами MATLAB с определенными свойствами. Для изменения этих свойств можно воспользоваться функцией set. Кроме того, с помощью инспектора свойств (Inspector) можно изменить свойства компонентов (объектов), размещенных в форме. После выделения необходимого объекта инспектор свойств можно вызвать либо открыв контекстное меню и выбрав команду Property Inspector, либо на щелкнув на панели инструментов на кнопку Программирование событий в MATLAB - student2.ru . В результате на экране монитора пользователя появится окно инспектора свойств, показанное на рис. 2.41.2.

Рассмотрим основные свойства окна редактирования, метки и кнопки.

Прежде всего отметим, что у всех компонентов одним из основных свойств является Tag – имя компоненты (объекта) в программе (причем сначала компоненты получают имена text1, text2, … (метки); edit1, edit2, … (текстовые поля); pushbutton1, pushbutton2, … (кнопки).

У большинства компонент есть свойство String, определяющее текст для кнопок и меток, а также текст, находящийся в соответствующем текстовом поле. Почти у всех объектов есть свойство Visible, определяющее является ли элемент видимым (значение on) или нет (значение off).

Расположение элемента в форме определяется свойством Position. У графического окна свойства Position – это массив из четырех элементов [xleft,ybottom,width,height], где xleft и ybottom определяют ко-

ординаты левого нижнего угла экрана; width – ширина; height – высота окна (все в пикселях). Для осей параметр Position определяется как массив из четырех элементов [xleft,ybottom,width,height], где величины xleft, ybottom, width и height задаются в относительных координатах графического окна (т.е. ширина и высота окна принимаются равными 1, а левый нижний угол имеет координаты (0,0)).

Расположение элемента в форме определяется свойством Position. У графического окна свойства Position – это массив из четырех элементов [xleft,ybottom,width,height], где xleft и ybottom определяют координаты левого нижнего угла экрана; width – ширина; height – высота окна (все в пикселях). Для осей параметр Position определяется как массив из четырех элементов [xleft,ybottom,width,height], где величины xleft, ybottom, width и height задаются в относительных координатах графического окна (т.е. ширина и высота окна принимаются равными 1, а левый нижний угол имеет координаты (0,0)).

Установим у элементов создаваемого приложения свойства, представленные в таблицах 2.41.1, 2.41.2, после чего форма примет вид, показанный на рис. 2.41.3 (заметим, что цвет фона для первых трех меток был принят желтым (для четвертой – кремовый), размер шрифта установлен 16.0; цвет фона для кнопки принят голубым, размер шрифта установлен 14.0)).

Таблица 2.41.1. Основные свойства объектов задачи (метки).

Свойство Первая метка Вторая метка Третья метка Четвертая метка
Tag text_a text_b text_c text_solve
String a= b= c=  
Visible on On on on

Таблица 2.41.2. Основные свойства объектов задачи (текстовые поля, кнопка).

Свойство Первое текстовое поле Второе текстовое поле Третье текстовое поле Кнопка
Tag edit_a edit_b edit_c pushbutton_solve
String       Решить уравнение
Visible on On on on

Программирование событий в MATLAB - student2.ru

Рис. 2.41.2. Окно инспектора свойств.

Программирование событий в MATLAB - student2.ru

Рис. 2.41.3. Окно приложения после установки свойств компонентов.

Программирование событий в MATLAB - student2.ru

Рис. 2.41.4. Общий вид запущенного приложения.

Теперь можно попробовать запустить создаваемое приложение с помощью кнопки Программирование событий в MATLAB - student2.ru или выбрав в главном меню пункт Run и далее в ниспадающем окне указать Run: Sample_GUI (в данном случае Sample_GUI.fig – это имя файла, в котором размещен текст программы – перед запуском, разумеется, следует сохранить приложение (заметим, что после указания имени сохраняемого файла ему автоматически присвоится расширение .fig – в этом файле будет храниться окно приложения; кроме того, будет создан еще один файл с тем же именем, но с расширением .m т.е. Sample_GUI.m – в этом файле будет храниться основная файл-функция для работы с приложением (которая служит для инициализации приложения) и несколько подфункций. После запуска на экран будет выведено окно приложения (рис. 2.41.4), но кнопка Решить уравнение, как и следовало ожидать, не выполнить никаких действий. Для того, чтобы приложение начало работать, требуется написать специальную функцию, реагирующую на щелчок мыши по указанной кнопке, т.е. созданная кнопка должны быть связана с программой обработки событий. Для каждого объекта или совокупности объектов в окне приложения с GUI такая программа, именуемая Callback, создается приложением GUIDE автоматически.

В частности, в файле Sample_GUI.m уже есть пустая подфункция, отвечающая за работу события Callback (так в MATLAB называется «щелчок мыши по компоненту»). Эта функция Pushbutton_Solve_Callback:

% --- Executes on button press in pushbutton_solve.

function pushbutton_solve_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton_solve (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

Отметим, что имя функции состоит из имени компонента, символа подчеркивания и имени события (здесь уместно пояснить, что в общем случае функция-обработчик любого события в MATLAB имеет имя вида name_event, где name – имя компонента, а event – имя события, т.е. для того, чтобы построить обработчик любого события, необходимо создать функцию с именем name_event). При написании подфункции следует принять во внимание, что в переменной hObject хранится указатель на объект, событие которого обрабатывается в данный момент (в рассматриваемом случае указанный объект – это кнопка, а переменная handles является структурой с указателями на все объекты (компоненты) приложения. В этой связи для того, чтобы обратиться к любому компоненту следует написать handles.name, где name совпадает со значением свойства Tag соответствующего компонента.

Для доступа ко всем обработчикам кнопки (или какого-либо другого компонента) ее следует выделить, вызвать контекстное меню, в котором выбрать команду ViewCallbacks, и нужный обработчик (Callback).

Таким образом, осталось лишь написать текст функции Pushbutton_Solve_Callback, которая будет выполнять следующие действия:

1) Преобразование считанных строк из текстовых полей text_a, text_b и text_c в вещественные переменные a, b и c.

2) Решение уравнения и формирование по результатам решения строки с корнями (корнем) или сообщения, что корней нет.

3) Отображение результата (строки) в компоненту textSolve.

Текст функции с необходимыми пояснениями в виде комментариев приведен ниже.

% --- Executes on button press in pushbutton_solve.

function pushbutton_solve_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton_solve (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Считываем из компоненты edit_a строку,

% которую преобразовываем в вещественное число a

% (для получения строки считывается свойство String

% из компонента с именем edit_a с помощью функции get,

% обращение к нетекущему компоненту осуществляется

% с помощью функции handles.edit_a

a=str2double(get(handles.edit_a,'String'));

% Считываем из компонента с именем edit_b строку,

% которую преобразовываем в вещественное число b

b=str2double(get(handles.edit_b,'String'));

% Считываем из компонента с именем edit_c строку,

% которую преобразовываем в вещественное число c

c=str2double(get(handles.edit_c,'String'));

if a==0

% Квадраное уравнение сводится к линейному

x=-c/b;

% Формирование строки с результатом

S=sprintf('X=%g\t',x);

else

d=b*b-4*a*c

if d<0

% Случай отрицательного дискриминанта

% Формирование строки с результатом

S='Действительных корней нет';

else

% Случай неотрицательного дискриминанта

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

% Формирование строки с результатом

S=sprintf('X1=%g\t X2=%g',x1,x2);

end

end

% Свойство компонента handles.textSolve String

% равно S, что приводит к выводу текста S

% на метку handles.textSolve

set(handles.textSolve,'String',S);

Запустив теперь рассматриваемое приложение на выполнение, введя значения коэффициентов a, b и c, после щелчка по кнопке Решить уравнение, получим ожидаемо верные результате, представленные на рис. 2.41.5.

Программирование событий в MATLAB - student2.ru

Рис. 2.41.5. Окно приложения решения квадратного уравнения.

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

Наши рекомендации