MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Приложения с GUI и дескрипторная графика

Размещение математических символов в диалоговых окнах

Размещение математических символов в диалоговых окнах

В этом разделе мы рассмотрим создание диалоговых окон для приложений с графическим интерфейсом пользователя, в которых должны быть различные математические символы, греческие буквы и т.д. Такая проблема часто возникает, когда требуется создать диалоговое окно, предназначенное для ввода параметров. Обычно такие окна состоят из строк ввода, снабженных обозначениями параметров и кнопок OK и Cancel.

Мы разберем, как при помощи среды визуального программирования GUIDE пакета MATLAB быстро создавать функции, выводящие такие диалоговые окна и возвращающие введенные в них значения параметров, а также как использовать их затем в собственных приложениях c графическим интерфейсом, созданных без среды GUIDE. Сделаем мы это на примере функции dlg_betaomega, вызов которой из основной программы, выполняющей некоторый расчет,

[b1,b2,o,f] = dlg_betaomega

приводит к появлению на экране диалогового окна Parameters для ввода параметров , и , приведенного на рисунке ниже


Диалоговое окно Parameters

В трех строках ввода , и пользователь вводит нужные числовые значения соответствующих параметров и закрывает окно нажатием на кнопку OK. При этом функция dlg_betaomega возвращает введенные пользователем значения параметров в первых трех выходных аргументах b1,b2 и o. Четвертый выходной аргумент f нужен для того, что бы узнать, как пользователь закрыл окно. Если значение f оказалось равным 1, то окно было закрыто нажатием на кнопку OK и введенные параметры надо использовать в расчете. Если же пользователь передумал вводить параметры или, скажем, ввел неверные значения и закрыл окно при помощи кнопки Cancel или кнопки с крестиком на заголовке окна Parameters, то функция dlg_betaomega возвращает в четвертом выходном аргументе f нулевое значение. Далее в основной программе надо принимать решение в зависимости от возвращаемого значения флага f.

Материал этого раздела написан так, что его можно читать не обладая знаниями о создании приложений с графическим интерфейсом пользователя как в среде визуального программирования GUIDE, так и без нее.

Создание приложений с графическим интерфейсом в среде визуального программирования GUIDE и без нее описано в разделе Приложения с GUI и дескрипторная графика.

Рассмотрим сначала простой пример, касающийся вывода формул в графическое окно.

Простой пример вывода формулы в графическое окно

Размещение объекта Static Text в окне приложения с графическим интерфейсом пользователя позволяет только вывести простой текст без верхних и нижних индексов и, тем более, без греческих букв или знаков суммы, интеграла. Однако, в MATLAB имеется возможность выводить математические формулы на оси. Для этого на осях размещается текстовый объект, создаваемый при помощи функции text, а сами оси можно сделать невидимыми. Тогда будет казаться, что текстовый объект размещен в самом графическом окне. У текстового объекта есть свойство Interpreter, которое может принимать три значения:

  • 'tex' - поддержка тегов TeX;
  • 'latex' - поддержка тегов LaTeX (больше возможностей по набору красивых формул, чем при задании значения tex);
  • 'none' - вывод всех символов текстового объекта так, как они заданы, без учета тегов TeX или LaTeX.

При задании свойству Interpreter текстового объекта значений 'tex' или 'latex' можно управлять начертанием символов, т.е. делать курсив, жирный шрифт, изменять размер шрифта. Значение свойства Interpreter можно задавать прямо при создании текстового объекта в аргументах функции text.

Рассмотрим пример, в котором в графическое окно NewtonLeibnitz выводится формула Ньютона-Лейбница:


Графическое NewtonLeibnitz окно с выведенной в него формулой

Это окно выводит на экран функция NewtonLeibnitz, в которой создаются следующие графические объекты:

  1. графическое окно белого цвета без стандартных меню и панели инструментов (при помощи функции figure);
  2. невидимые оси, совпадающие по размеру с графическим окном, (при помощи функции axes);
  3. соответствующий текстовый объект с использование интерпретатора LaTeX (при помощи функции text).

Текст функции NewtonLeibnitz приведен ниже.

function NewtonLeibnitz
% создание графического окна белого цвета без стандартной строки меню 
% и панели инструментов с заголовком NewtonLeibnitz шириной 230 и высотой 55 пикселей 
figure('MenuBar','none','Color','w','Name','NewtonLeibnitz',...
    'NumberTitle','off','Position',[400 300 230 55])
% создание невидимых осей, совпадающих по размерам с графическим окном 
axes('Position',[0 0 1 1],'Visible','off')
% задание строки с формулой в формате LaTeX
str='$$\int_a^b f(x)dx=F(b)-F(a)$$';
% создание текстового объекта на осях, шрифт 14пт
text('Interpreter','latex','String',str,'FontSize',14,...
    'Units','pixels','Position',[10 30])

В это примере использованы некоторые свойства графических окон, осей и текстового объекта, такие как: Position, Units и т.д. Свойства графических объектов описаны в разделах:

  • Объект Text http://matlab.exponenta.ru/forum/gui/book1/grbase1.php
  • Свойства осей http://matlab.exponenta.ru/forum/gui/book1/index.php#5
  • Свойства графических окон http://matlab.exponenta.ru/forum/gui/book1/grwin.php

Использование свойства Interpreter текстовых объектов подробно описано в разделе Вывод математических формул, смена шрифта и начертания http://matlab.exponenta.ru/forum/gui/book1/grfont.php. Там же содержатся различные примеры создания формул, содержащих суммы, интегралы, пределы, матрицы и т.д..

Перейдем теперь к работе над нашей функцией dlg_betaomega. Ее создание состоит из двух этапов:

  1. конструирование диалогового окна Parameters в среде визуального программирования GUIDE, задание необходимых значений свойствам его компонент и сохранение окна в файле с расширением fig;
  2. программирование функции dlg_betaomega, открывающей данное окно, содержащей подфункции, которые задают необходимые действия при различных вариантах закрытия диалогового окна Parameters пользователем.

Конструирование диалогового окна Parameters в среде GUIDE

Рассмотрим создание диалогового окна Parameters, приведенного в начале раздела Размещение математических символов в диалоговых окнах, в котором будет три строки ввода для ввода параметров , и , а также кнопки OK и Cancel. Мы создадим это окно в среде визуального программирования GUIDE, размести на нем нужные компоненты (кнопки, области ввода, оси) и зададим их свойства.

Для запуска среды визуального программирования GUIDE достаточно в командной строке выполнить команду

>> guide

(или воспользоваться кнопкой GUIDE на панели инструментов основного окна рабочей среды MATLAB).

На экране появляется диалоговое окно GUIDE Quick Start. Надо убедиться, что на вкладке Create New GUI в списке GUIDE Templates выбран пункт Blank GUI (Defaults), что необходимо для создания пустой заготовки окна, и нажать кнопку OK. После этого на экране отображается основное окно среды визуального программирования GUIDE с заготовкой для окна приложения. Заготовка окна приложения находится справа, на ней нанесена вспомогательная сетка для удобства размещения элементов интерфейса.

Процесс создания элементов интерфейса в среде GUIDE достаточно прост. Слева в окне есть вертикальная панель инструментов, на которой расположены инструменты для нанесения на форму (заготовку окна приложения) различных элементов интерфейса (кнопок, областей ввода, осей, списков, полос прокрутки, переключателей, флагов, осей и т.д.).


Среда GUIDE

Сначала выбирается нужный инструмент, а затем элемент интерфейса рисуется на заготовке окна приложения при помощи мыши. Удобно сначала уменьшить шаг сетки и установить привязку к сетке для более точного рисования элементов интерфейса (в среде GUIDE есть возможность выравнивания объектов, но это нам не понадобится). Для этого следует в меню Tools среды GUIDE выбрать пункт Grid and Rules. При этом появляется диалоговое окно Grid and Rules.


Диалоговое окно Grid and Rules

В окне Grid and Rules надо установить размер сетки в 10 пикселей в списке Grid Size (in Pixels), включить флаг Snap to grid и закрыть окно.

Уменьшим размер заготовки окна, потянув за квадратный черный маркер в ее правом нижнем углу, и разместим на заготовке окна приложения три пары осей, три строки ввода и две кнопки так, как показано на рисунке ниже.

Примечание. Размеры размещаемых элементов можно менять при помощи мыши, протаскивая за маркеры в углах. Сами элементы можно перемещать, захватив мышью, или плавно при помощи клавиш со стрелками. Нажатие на клавиши со стрелками с удержанием клавиши <Ctrl> приводит к перемещению с привязкой к сетке.


Размещение элементов интерфейса на заготовке окна приложения

Если не получилось сделать точно так, как показано на рисунке выше, то ситуацию можно будет исправить при задании значений свойствам элементов интерфейса в инспекторе свойств (в том числе размеров и положения), чем мы сейчас и займемся.

Основным в нашем примере свойством элементов интерфейса является тег (Tag). Тег является уникальным именем объекта, которое позволяет просто идентифицировать его среди других объектов приложения. Теги понадобятся нам при программировании событий, возникающих при нажатии пользователем на кнопки в диалоговом окне, и для получения информации из строк ввода. Мы также будем использовать свойство объектов Units, отвечающее за то, в каких единицах измерения задается размер и положение объекта. Размер и положение объекта в выбранных единицах измерения определяется вектором из четырех чисел

[x y width height]

где

  • x и y - координата левого нижнего угла объекта;
  • width - ширина объекта;
  • height - высота объекта;

Этот вектор задается в качестве значения свойства Position, при этом

  • размер и положение графических окон задаются относительно экрана монитора;
  • размер и положение осей, кнопок, строк ввода задаются относительно графического окна.

За надпись на объекте (кнопке, строке ввода) отвечает его свойство String, а текст заголовка окна приложения задается при помощи свойства Name графического окна.

Для задания значений свойствам элемента интерфейса достаточно сделать по нему двойной щелчок мыши (для задания значений свойствам графического требуется сделать двойной щелчок по свободной области на заготовке окна приложения). При этом появляется окно инспектора свойств Property Inspector с таблицей. В левом ее столбце записаны названия свойств в алфавитном порядке, а в правом - задаются их значения вводом или выбором из возможных. Значением некоторых свойств, в частности Position, является вектор, поэтому слева от их названия расположения кнопка со знаком плюс для покомпонентного ввода элементов вектора.


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

Зададим следующие значения свойства объектов.

Графическое окно

  • Tag - win
  • Units - pixels
  • Position - [400 300 185 170]
  • Name - parameters

Кнопка, расположенная слева

  • Tag - btn_OK
  • String - OK
  • Units - pixels
  • Position - [10 10 70 20]

Кнопка, расположенная справа

  • Tag - btn_Cancel
  • String - Cancel
  • Units - pixels
  • Position - [100 10 70 20]

Верхняя пара осей

  • Tag - ax_beta1
  • Units - pixels
  • Position - [10 140 20 20]
  • Visible - off

Средняя пара осей

  • Tag - ax_beta2
  • Units - pixels
  • Position - [10 100 20 20]
  • Visible - off

Нижняя пара осей

  • Tag - ax_Omega
  • Units - pixels
  • Position - [10 60 20 20]
  • Visible - off

Верхняя строка ввода

  • Tag - edt_beta1
  • Units - pixels
  • Position - [40 130 130 20]
  • String - пустая строка

Средняя строка ввода

  • Tag - edt_beta2
  • Units - pixels
  • Position - [40 90 130 20]
  • String - пустая строка

Нижняя строка ввода

  • Tag - edt_Omega
  • Units - pixels
  • Position - [40 50 130 20]
  • String - пустая строка

Теперь осталось сохранить сконструированное диалоговое окно. Но по умолчанию, для сохранения графического окна в среде визуального программирования GUIDE используется два файла - с расширением fig и с расширением m. Нам нужно сохранить наше окно Parameters только в одном файле parameters.fig. Для этого в меню Tools среды GUIDE следует выбрать пункт GUI Options... и в появившемся диалоговом окне GUI Options cделать настройки в соответствии с рисунком ниже.


Диалоговое окно GUI Options

После этого закроем диалоговое окно GUI Options и сохраним наше графическое окно в файле с именем parameters, воспользовавшись стандартной кнопкой сохранения файла на горизонтальной панели инструментов окна GUIDE.

Среда GUIDE нам больше не понадобится, ее можно закрыть. Перейдем к программированию функции dlg_betaomega, открывающей диалоговое окно Parameters и задающей требуемые действия при работе пользователя с этим окном.

Программирование функции dlg_betaomega

При нажатии пользователем на кнопки OK и Cancel в окне Parameters возникают события Callback, обработка которых требует написания подфункций, выполняющих соответствующие действия. При закрытии окна пользователем возникает его событие CloseRequestFcn, которое так же потребует соответствующей обработки.

Файл dlg_betaomega.m будет устроен следующим образом. В нем будет основная функция dlg_betaomega, в которой выполняются следующие действия:

  1. открывается окно parameters.fig при помощи функции open и указатель на него записывается в переменную H;
  2. помощи функции guihandles получаются указатели на объекты окна parameters.fig они записываются в структуру HANDLES (кратко о работе со структурами в MATLAB написано здесь), названия полей структуры HANDLES совпадают с тегами объектов, которые мы задали всем объектам при создании диалогового окна Parameters в среде GUIDE;
  3. на оси наносятся текстовые объекты , и при помощи функции text с использованием интерпретатора tex;
  4. с событиями Callback кнопок OK и Cancel, а также с событием CloseRequestFcn окна связываются некоторые подфункции при помощи функции set, причем первым аргументом функции set является указатель на объект (кнопку или графическое окно), а далее идут пары: НазваниеСвойства, значение, …;
  5. вызывается специальная функция waitfor, которая ожидает закрытие диалогового окна Parameters, ее входным аргументом должен быть указатель на окно. Когда окно закрыли (любым из способов), то основная функция dlg_betaomega завершает работу и возвращает значения параметров и флаг, говорящий о том, как было закрыто окно (при помощи кнопки OK, кнопки Cancel или кнопки с крестиком на заголовке окна).

Заметим, что для выполнения п. 3) придется сделать указатели объектов окна видимыми (они не видны по умолчанию при создании окна в среде GUIDE для того, чтобы предотвратить случайное изменение объектов пользователем или выполняющимся другим приложением). Для этого мы воспользуемся свойством HandleVisibility графического окна, установив его значение в 'on' на время добавления текстовых объектов на оси. После вывода текстовых объектов вернем свойству HandleVisibility исходное значение 'off'.

После основной функции поместим подфункции обработки событий, которых будет всего две (не смотря на то, что есть всего три обрабатываемых событий: два события Callback от кнопок OK и Cancel и еще одно событие CloseRequestFcn графического окна). Первая из подфункции обработки событий, которую назовем OK_Callback, работает при нажатии пользователем кнопки OK, а вторая - Cancel_Callback - работает при закрытии окна либо нажатием на кнопку Cancel, либо на кнопку с крестиком в верхнем левом углу на заголовке окна Parameters.

В подфункции OK_Callback надо:

  1. получить информацию о введенных значениях параметров в строки ввода , и (это будут строковые значения) при помощи функции get (ее первым входным аргументом является указатель на объект, в данном случае - на строку ввода, а вторым - название нужного свойства, в данном случае - String);
  2. преобразовать строковое представление числа в обычное числовое при помощи функции str2num;
  3. записать полученные значения в выходные аргументы beta1, beta2 и Omega основной функции dlg_betaomega и, кроме того, присвоить выходному аргументу основной функции dlg_betaomega flag значение 1;
  4. закрыть диалоговое окно Parameters при помощи функции delete (она удаляет объект, указатель на который задан в ее входном аргументе).

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

Возможна ситуация, когда пользователь введет нечисловые данные, или вообще оставит строку ввода пустой и нажмет OK. Но ошибки не произойдет, т.к. функция str2num в этом случае вернет пустой массив. Эту ситуацию можно будет обработать в блоке операторов, в котором происходит вызов функции dlg_betaomega.

В подфункции Cancel_Callback надо:

  1. присвоить выходному аргументу flag основной функции dlg_betaomega значение 0;
  2. присвоить какие-то (например нулевые значения) остальным выходным аргументам основной функции dlg_betaomega, иначе они будут неопределенны, что приведет к ошибке при завершении ее работы.
  3. закрыть диалоговое окно Parameters при помощи функции delete.

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

set(HANDLES.btn_OK,'Callback',{@OK_Callback,HANDLES})

Здесь с событием Callback кнопки OK (с тегом, хранящемся в поле btn_OK структуры HANDLES) связывается подфункция OK_Callback, у которой будет три входных аргумента. Первые два из них такие, как по умолчанию (первый содержит указатель на объект, событие которого выполняется, а второй в нашем случае не используется, он для некоторых событий содержит дополнительную информацию о событии). Третий входной аргумент подфункции OK_Callback будет содержать структуру HANDLES с указателями на объекты приложения.

Тексты основной функции dlg_betaomega и двух подфункций OK_Callback и Cancel_Callback приведены ниже с необходимыми комментариями. Все они должны быть записаны в файл dlg_betaomega и размещены в той же папке, что и файл окна приложения parameters.fig

function [beta1,beta2,Omega,flag]=dlg_betaomega
% основная функция, инициализирующая диалоговое окно для ввода параметров
% beta1, beta2, Omega и возвращающая  их значения
% flag = =1 при закрытии окна кнопкой OK и flag == 0 при другом способе его закрытия

% открываем диалоговое окно parameters и записываем указатель на него в H
H=open('parameters.fig');
% получаем структуру указателей на объекты окна, 
% названия ее полей совпадают с тегами объектов
HANDLES=guihandles(H);
% временно делаем доступными указатели на объекты окна
set(H,'HandleVisibility','on')
% делаем текущими верхние оси
axes(HANDLES.ax_beta1)
% выводим на них текстовый объект с обозначением первого параметра 
text('Interpreter','tex','String','\beta_1')
% делаем текущими средние оси
axes(HANDLES.ax_beta2)
% выводим на них текстовый объект с обозначением второго параметра 
text('Interpreter','tex','String','\beta_2')
% делаем текущими нижние оси
axes(HANDLES.ax_Omega)
% выводим на них текстовый объект с обозначением третьего параметра 
text('Interpreter','tex','String','\Omega')
% возвращаем состояние указателей на объекты окна, теперь они недоступны 
set(H,'HandleVisibility','off')
% с событием Callback кнопки OK связываем подфункцию OK_Callback
% передаем в нее дополнительным аргументом структуру указателей на объекты окна
set(HANDLES.btn_OK,'Callback',{@OK_Callback,HANDLES})
% с событием Callback кнопки Cancel связываем подфункцию Cancel_Callback
% передаем в нее дополнительным аргументом указатель на само окно
set(HANDLES.btn_Cancel,'Callback',{@Cancel_Callback,H})
% с событием CloseRequestFcn окна связываем подфункцию Cancel_Callback
% передаем в нее дополнительным аргументом указатель на само окно
set(HANDLES.win,'CloseRequestFcn',{@Cancel_Callback,H})
% ожидаем закрытие диалогового окна
waitfor(H);


function OK_Callback(src,evt,handles)
% подфункция обработки нажатия на кнопку OK

% присваиваем flag = 1 d в среде переменных основной функции
assignin('caller','flag',1)
% получаем строковые значения параметров, введенных в строки ввода
beta1str=get(handles.edt_beta1,'String');
beta2str=get(handles.edt_beta2,'String');
Omegastr=get(handles.edt_Omega,'String');
% преобразуем их в числа и присваиваем соответствующим выходным аргументам 
% основной функции  
assignin('caller','beta1',str2num(beta1str))
assignin('caller','beta2',str2num(beta2str))
assignin('caller','Omega',str2num(Omegastr))
% удаляем окно Parameters
delete(handles.win)

function Cancel_Callback(src,evt,h)
% присваиваем flag = 0  в среде переменных основной функции
% а так же нули остальным ее выходным аргументам
assignin('caller','flag',0)
assignin('caller','beta1',0)
assignin('caller','beta2',0)
assignin('caller','Omega',0)
% удаляем окно Parameters
delete(h)

Проверка вводимых значений параметров

Если мы хотим проверить, являются ли введенные значения числовыми, то для этого достаточно убедиться, что содержимое строк ввода успешно преобразовалось в числа или числовые массивы (если это не так, то функция str2num вернет пустой массив). Для этого можно применить функцию isempty, проверяющую, является ли ее входной аргумент пустым массивом (в MATLAB он обозначается []). Если массив пустой, то isempty возвращает 1, иначе 0.

Если преобразование содержимого хотя бы одной из строк ввода оказалось неуспешным, то выведем диалоговое окно с сообщением об ошибке. Сделаем его модальным, т.е. таким окном, которое требует его закрытия для продолжения работы.

Измененная подфункция приведена ниже OK_Callback.

function OK_Callback(src,evt,handles)
% подфункция обработки нажатия на кнопку OK

% присваиваем flag = 1 d в среде переменных основной функции
assignin('caller','flag',1)
% получаем строковые значения параметров, введенных в строки ввода
beta1str=get(handles.edt_beta1,'String');
beta2str=get(handles.edt_beta2,'String');
Omegastr=get(handles.edt_Omega,'String');
% Преобразуем строковые значения в числовые
beta1=str2num(beta1str);
beta2=str2num(beta2str);
Omega=str2num(Omegastr);
% Проверяем, все ли параметры - числа (или числовые массивы)
if isempty(beta1) | isempty(beta2) | isempty(Omega)
    % какой-то из параметров не число (или не числовой массив)
    % выводим окно с сообщением об ошибке   
    h=errordlg('Parameters must be numbers','Error','on');    
    % делаем его модальным
    set(h,'WindowStyle','modal')
else
    % все параметры - числа (или числовые массивы)
    % присваиваем соответствующим выходным аргументам основной функции  
    assignin('caller','beta1',beta1)
    assignin('caller','beta2',beta2)
    assignin('caller','Omega',Omega)
    % удаляем окно Parameters
    delete(handles.win)
end

Если же некоторые параметры могут быть только числами, но не массивами, то надо заменить соответствующие функции isempty на isscalar. Функция isscalar возвращает 1, если ее входной аргумент является числом, а иначе она возвращает 0.

Другой вариант функции dlg_betaomega с использованием вложенных функций

В 7-ой версии MATLAB появились вложенные функции (nested functions), которые в нашем случае позволяют обойтись без использования подфункций для обработки событий и без функции assignin для присваивания переменным основной функции значений из подфункций.

Про использование вложенных функций написано в разделе Использование вложенных функций в приложениях GUI. Файл-функция для окна, возвращающая введенные в него параметры.

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

Ниже приведена другая версия программирования функции для нашего диалогового окна с использованием подфункций по сравнению с функцией dlg_betaomega, описанной в разделе Программирование функции dlg_betaomega. Файл parameters.fig, созданный в среде GUIDE при чтении раздела Конструирование диалогового окна Parameters в среде GUIDE, остается без изменений. Новая функция называется dlg_betaomega1, вложенные функции обработки событий называются так же, как и соответствующие подфункции функции dlg_betaomega.

function [beta1,beta2,Omega,flag]=dlg_betaomega1
% основная функция, инициализирующая диалоговое окно для ввода параметров
% beta1, beta2, Omega и возвращающая  их значения
% flag = =1 при закрытии окна кнопкой OK и flag == 0 при другом способе его закрытия

% открываем диалоговое окно parameters и записываем указатель на него в H
H=open('parameters.fig');
% получаем структуру указателей на объекты окна, 
% названия ее полей совпадают с тегами объектов
HANDLES=guihandles(H);
% временно делаем доступными указатели на объекты окна
set(H,'HandleVisibility','on')
% делаем текущими верхние оси
axes(HANDLES.ax_beta1)
% выводим на них текстовый объект с обозначением первого параметра 
text('Interpreter','tex','String','\beta_1')
% делаем текущими средние оси
axes(HANDLES.ax_beta2)
% выводим на них текстовый объект с обозначением второго параметра 
text('Interpreter','tex','String','\beta_2')
% делаем текущими нижние оси
axes(HANDLES.ax_Omega)
% выводим на них текстовый объект с обозначением третьего параметра 
text('Interpreter','tex','String','\Omega')
% возвращаем состояние указателей на объекты окна, теперь они недоступны 
set(H,'HandleVisibility','off')
% с событием Callback кнопки OK связываем подфункцию OK_Callback
set(HANDLES.btn_Cancel,'Callback',@Cancel_Callback)
% с событием Callback кнопки Cancel связываем подфункцию Cancel_Callback
set(HANDLES.btn_OK,'Callback',@OK_Callback)
% с событием CloseRequestFcn окна связываем подфункцию Cancel_Callback
set(HANDLES.win,'CloseRequestFcn',@Cancel_Callback)
% ожидаем закрытие диалогового окна
waitfor(H);

function OK_Callback(src,evt)
    % вложенная функция обработки нажатия на кнопку OK

    % присваиваем нужные значения выходным аргументам основной функции
    flag =1;
    beta1str=get(HANDLES.edt_beta1,'String');
    beta2str=get(HANDLES.edt_beta2,'String');
    Omegastr=get(HANDLES.edt_Omega,'String');
    beta1=str2num(beta1str);
    beta2=str2num(beta2str);
    Omega=str2num(Omegastr);
    % удаляем окно приложения
    delete(H)
end

function Cancel_Callback(src,evt)
    % вложенная функция обработки нажатия на кнопку OK

    % присваиваем нужные значения выходным аргументам основной функции
    flag =0;
    beta1=0;
    beta2=0;
    Omega=0;
    % удаляем окно приложения
    delete(H)
end

% конец основной функции
end


Поиск по сайту:

Система Orphus

Яндекс.Метрика