第十章 图形用户界面(GUI )制作 10.1 入门【例10.1-1】对于传递函数为1212++=s s G ζ的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。
本例演示:(A )图形界面的大致生成过程;(B )静态文本和编辑框的生成;(C )坐标网格控制键的形成;(D )如何使用该界面。
(1)产生图形窗和轴位框:如图10.1-1所示。
clf resetH=axes('unit','normalized','position',[0,0,1,1],'visible','off'); set(gcf,'currentaxes',H);str='\fontname{隶书}归一化二阶系统的阶跃响应曲线';text(0.12,0.93,str,'fontsize',13);h_fig=get(H,'parent');set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.4]); h_axes=axes('parent',h_fig,...'unit','normalized','position',[0.1,0.15,0.55,0.7],... 'xlim',[0 15],'ylim',[0 1.8],'fontsize',8);图 10.1-1 产生坐标轴(2)在坐标框右侧生成作解释用的“静态文本”和可接收输入的“编辑框”:如图10.1-2所示。
h_text=uicontrol(h_fig,'style','text',...'unit','normalized','position',[0.67,0.73,0.25,0.14],... 'horizontal','left','string',{'输入阻尼比系数','zeta ='}); h_edit=uicontrol(h_fig,'style','edit',...'unit','normalized','position',[0.67,0.59,0.25,0.14],... 'horizontal','left',...'callback',[...'z=str2num(get(gcbo,''string''));',...'t=0:0.1:15;',...'for k=1:length(z);',...'y(:,k)=step(1,[1 2*z(k) 1],t);',...'plot(t,y(:,k));',...'if (length(z)>1) ,hold on,end,',...'end;',...'hold off,']);图 10.1-2 在图形界面中添加编辑框和文本框(3)形成坐标网格控制按键:如图10.1-3所示。
h_push1=uicontrol(h_fig,'style','push',...'unit','normalized','position',[0.67,0.37,0.12,0.15],...'string','grid on','callback','grid on');h_push2=uicontrol(h_fig,'style','push',...'unit','normalized','position',[0.67,0.15,0.12,0.15],...'string','grid off','callback','grid off');图 10.1-3 添加了两个按键的图形界面(4)输入阻尼比系数 ,可得单位阶跃响应曲线:如图10.1-4和图10.1-5所示。
图 10.1-4 输入标量阻尼比所得到的响应曲线图 10.1-5 输入阻尼比数组所得到的一组响应曲线10.2图形用户界面的设计原则和一般步骤10.2.1设计原则10.2.2一般制作步骤10.3界面菜单(uimenu)10.3.1图形窗的标准菜单【例10.3-1】本例说明:如何隐藏和恢复标准菜单的显示。
(1)获得缺省设置的标准菜单(如图10.3-1所示)figure(2)隐去标准菜单的两种方法(如图10.3-2所示)set(H_fig , 'MenuBar','none');set(gcf,'menubar',menubar);(3)恢复图形窗上标准菜单(如图10.3-1所示)set(gcf,'menubar','figure');图 10.3-1 含有菜单条的图形窗图 10.3-2 移去菜单条的图形窗10.3.2自制的用户菜单【例10.3-2】本例目标:创建如图10.3-3那样的菜单,Color菜单项及其下拉的Blue菜单各带一个简捷键,而另一项下拉菜单Red带一个快捷键。
编写如下程序:[exm103_2.m]figureh_menu=uimenu(gcf,'Label','&Color');h_submenu1=uimenu(h_menu,'Label','&Blue',...'Callback','set(gcf,''color'',''blue'')');h_submenu2=uimenu(h_menu,'label','Red',...'Callback','set(gcf,''color'',''red'')',...'Accelerator','r');图 10.3-3 用户菜单及快捷键设置10.3.3用户菜单的属性【例10.3-3】本例的目标是:在图形窗上自制一个名为【Test】的“顶层菜单项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。
通过本例说明:(A)回调属性的运作机理;(B)用户顶层菜单项的制作(C)uimenu属性的设置方法;(D)复杂字符串的构成方法和注意事项。
(1)产生图10.3-4界面的uimenu的书写格式一:uimenu('Label','Test','Callback','grid on,set(gca,''box'',''on''),')图10.3-4 通过顶层菜单Test形成的带分格的封闭坐标轴(2)产生图10.3-4界面的uimenu的书写格式二:uimenu('Label','Test', ...'Callback',['grid on,' , ...'set(gca,''box'',''on'');'])(4)产生图10.3-4界面的uimenu的书写格式三:Lpv='Test';Cpv=['grid on,','set(gca,''box'',''on''),'];uimenu('Label', Lpv, 'Callback' , Cpv)(5)产生图10.3-4界面的uimenu的书写格式四:bel='Test';PS.Callback=['grid on;','set(gca,''box'',''on'');'];uimenu(PS)10.3.4现场菜单的制作【例10.3-4】目标:绘制一条Sa曲线,创建一个与之相联系的现场菜单,用以控制Sa曲线的颜色(图10.3-5)。
(1)编写脚本M文件exm103_4.m[exm103_4.m]t=(-3*pi:pi/50:3*pi)+eps;y=sin(t)./t;hline=plot(t,y);cm=uicontextmenu;%制作具体菜单项,定义相应的回调uimenu(cm,'label','Red','callback','set(hline,''color'',''r''),')uimenu(cm,'label','Blue','callback','set(hline,''color'',''b''),')uimenu(cm,'label','Green','callback','set(hline,''color'',''g''),')set(hline,'uicontextmenu',cm)(2)在指令窗中运行文件exm103_4.m ,得到图10.3-5所示的(但为蓝色的)Sa曲线。