Создание пользовательского интерфейса.
Т
еперь
следует признаться, что автор пособия
до сих пор лукавил, скрывая свои истинные
намерения. Дело в том, что все-таки все
перечисленное можно сделать, обходясь
функциями графики высокого уровня:
plot, plot3,
surf и т.д. На самом
деле все это было подготовкой к тому,
чтобы начать разговор об использовании
GUI (Graphical
User Interface –
графического пользовательского
интерфейса). Конечно, очень важно уметь
получать решения поставленных перед
вами задач. Для этого достаточно овладеть
приемами программирования. Однако не
менее важно уметь представить полученные
результаты в удобной и наглядной форме.
Причем это важно не только для того,
чтобы пустить пыль в глаза начальнику
или заказчику. Часто хорошо продуманное
графическое оформление помогает лучше
осмыслить полученные результаты.
Вот для того, чтобы приступить к знакомству с GUI, и потребовалось предварительно познакомиться с необходимыми понятиями и приемами – хэндлами, взаимосвязью графических объектов, изменением свойств объектов с помощью команд get и set.
Итак, попробуем создать что-то очень простое. Начнем с того, что создадим фигуру и оси в ней:
>> hf=figure;
>> ha=axes;
Теперь нарисуем в осях какую-либо кривую, например, параболу:
>> x=linspace(0,1,101);
>> y=x.^2;
>> hl=line(x,y);
Фигура примет следующий вид:
Теперь попробуем реализовать следующую задумку. Поместим на этой фигуре две кнопки: одну с надписью on, а другую с надписью off. Первая будет включать в график сетку (для этого в MATLAB’е существует команда grid on), а вторая выключать (команда grid off). Для создания кнопки, как и для создания других объектов управления (линейки прокрутки, текстовые окна, списки, рамки и т.д.) используется команда uicontrol. Наберем эту команду в следующем виде:
>> hb1=uicontrol('Style','pushbutton','String','on','Callback','grid on');
Что мы здесь задали? Свойство Style указывает, какого типа объект создается. В данном случае значение pushbutton означает именно командную кнопку. Свойство String – это надпись на объекте. Наконец, свойство Callback – это команда, которая выполнится, если на эту кнопку нажать. Проверим и нажмем кнопку, которая появилась на фигуре. Действительно, сетка появилась.
Т
еперь
в соответствии с задумкой создаем вторую
кнопку:
>> hb2=uicontrol('Style','pushbutton','String','off','Callback','grid off');
Действительно, вторая кнопка появилась, и, нажав ее, удается отключить сетку. Но, вот беда, эта новая кнопка закрыла старую, и мы не можем включить сетку вновь. Дело в том, что задав явно три параметра, мы доверили MATLAB’у определить значения всех остальных параметров, в том числе и параметра, определяющего положение кнопки.
Поправим дело, ведь мы уже умеем изменять свойства объектов с помощью команды set:
>> set(hb2,'Position',[70 10 60 20])
>>
Т
еперь
видны обе кнопки, и обе они работают. Мы
можем это проверить понажимав на них
по очереди.
Выглядят они, правда, неказисто, одна наехала на другую, но не будем привередливы и сохраним это первое диалоговое приложение в своей рабочей директории под именем first.m. То есть все перечисленные команды наберем в редакторе m-файлов и сохраним в виде файла сценария.
Теперь закроем фигуру и наберем в командной строке >>first – окно вновь на экране и работает все так же.
