Создание пользовательского интерфейса

advertisement
Создание пользовательского интерфейса
Есть 3 способа:
1) “вручную”, с помощью
функций-конструкторов,
2) с помощью готовых стандартных
диалогов,
3) с помощью утилиты guide,
набрасывая элементы интерфейса на окно программы
Первый способ лучше других, хотя может показаться более долгим.
Недостатком второго способа является то, что готовые диалоги
существуют не для всех задач, поэтому применение их ограничено.
Утилита guide автоматически создает код, почти наверняка
несовместимый с более ранними версиями Matlab и возможно —
с более поздними. Кроме того, она непригодна для динамической
перестройки окна.
1. Интерфейс вручную.
Небольшая прикладная программа
Ввод
(пользователем
или из файла)
Вычисления
Визуализация
результатов
пример программы:
Фрактальный дракон
структура программы:
главный файл
(интерфейс)
dragon.m
файлы функций,
соответствующих кнопкам
MyDraw.m и MyClear.m
Интерфейс: конструкторы (в главном файле)
global hAxes hFig1 hEd1 hTxt1 hBut1 hList
— глобальные переменные
hFig1=figure;
— окно
hAxes=axes('Parent', hFig1, 'Color', [1 1 1], 'Units', 'normalized',...
'Position', [0.02 0.1 0.7 0.7], 'FontSize', 10,…
'XTick', [], 'YTick', []);
— область графика
hEd1=uicontrol(hFig1, 'Style', 'edit', 'Units', 'normalized',...
'BackgroundColor', [1 1 1], 'Position', [0.75 0.75 0.15 0.04],...
'HorizontalAlignment', 'left', 'String', 40000);
— Edit-элемент
hTxt1=uicontrol(hFig1, 'Style', 'text', 'Units', 'normalized',...
'Position', [0.75 0.8 0.15 0.04],…
'String', 'Iteration number');
— текст
hBut1=uicontrol(hFig1, 'Style', 'pushbutton', 'Units', 'normalized',...
'Position', [0.06 0.03 0.1 0.05], 'String', 'Clear',...
'Callback', 'MyClear');
— кнопка
hList=uicontrol(hFig1, 'Style', 'listbox', 'Units', 'normalized',...
'Position', [0.75 0.4 0.2 0.15],…
'String', {‘red', ‘green', ‘blue'});
— список
hPop=uicontrol(hFig1, 'Style', 'popup', 'Units', 'normalized',...
'Position', [0.75 0.4 0.2 0.1],…
'String', {‘red', ‘green', ‘blue'}, 'Callback', ‘MyDraw');
—
выпадающее меню
(либо ‘String‘, ‘red|green|blue‘ и обращаться к cellArr(index), а не
cellArr{index})
hCheckVX=uicontrol(hFig1, 'Style', 'checkbox', 'Units', 'normalized', …
'Position', [0.02 0.9 0.08 0.04], 'String', 'VX', 'Value', 0);
— флажок
hSlider=uicontrol('Style', 'slider', 'Units', 'normalized',...
'Value', 7, 'Min', 2, 'Max', 12, 'Position', [0.75 0.25 0.2 0.04]); — ползунок
Интерфейс: обработка (в файлах кнопок)
чтение из Edit-элемента:
str1=get(hEd1, 'String');
N=str2num(str1);
чтение из списка:
index=get(hList, 'Value');
cellArr=get(hList, 'String');
col=cellArr{index};
выдача в текст:
str2=num2str(pmin);
set(hTxt2, 'Visible', 'on', 'String', str2);
смена какого-то свойства:
set(hBut1, 'Visible', 'off');
зачистка области графика:
axes(hAxes);
cla;
2. Стандартные диалоги для ленивых
%Вообще говоря, все это – создание объектов hDlg=dialog(…) (типа figure)
%с нужными свойствами
запрос имени файла, существующего на компьютере:
[myname, mypath]=uigetfile('*.jpg', 'Запрос файла', 'd:\Photos\IMG_1573.jpg');
запрос имени файла для сохранения:
совершенно аналогично – uiputfile
[myname, mypath]=uiputfile('*.jpg', ‘Save as');
точно так же – uigetdir
запрос цвета:
mycolor=uisetcolor;
запрос ответа через нажатие кнопки:
mychoice=questdlg('Choose your favorite color:', 'Silly question', 'red', 'green', ...
'I am too busy', 'red');
ввод величин через Edit-элементы:
myvalues=inputdlg({'Velocity (m/s):', 'Diameter (m):'}, 'Enter something', ...
1, {'50', '1'});
полоска-степень выполнения задания:
hWait=waitbar(0);
for i=1:10
waitbar(i/10);
pause(0.5);%взамен какого-то расчета
end
delete(hWait);
% еще errordlg, helpdlg, msgbox...
3. Гайдина
вызов – командой guide либо File–>New–>GUI
рисуем (назначая разумные теги!) и получаем файлы .fig и .m
в конце m-файла – Callback-функции, их и стоит редактировать
добыть указатель можно так: handles.DrawButton
НЕДОСТАТКИ:
почти гарантированная несовместимость с более ранними версиями
и возможная – с более поздними,
принципиальная бесполезность при динамической перестройке окна:
получать указатели и менять свойства все равно придется
Download