您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > matlab教程详解(9)
1第十章图形用户界面GUI制作用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。图形用户界面(GraphicalUserInterfaces,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI的制作。但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。MATLAB为表现其基本功能而设计的演示程序demo是使用图形界面的最好范例。MATLAB的用户,在指令窗中运行demo打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。即便比较熟悉MATLAB的读者,在他初次编写GUI程序时,也会感到棘手。为使读者获得制作自己GUI的体验,本章“入门”节提供了一个简单的示例。读者只要输入所提供的程序,就可引出相应的界面。本章第2节叙述图形用户界面的设计原则和一般制作步骤。第3、4节分别介绍用户菜单、用户控件的制作。出于“由浅入深”的考虑,前4节制作GUI是通过M脚本文件实现的。利用M函数文件制作GUI,需要解决数据传递问题,为此专设第5节给予阐述和示例。这前5节内容对读者理解交互图形界面的工作原理很有帮助。本章第6节专述MATLAB6.5提供的界面设计工作台的使用。值得指出:该设计工作台与MATLAB5.3版的设计工具有很大不同。新的设计工作台显得更成熟、方便。在此提醒读者,假如要比较准确的理解本章程序和掌握本章内容,请先阅读第9章关于图柄的内容。10.1入门【例10.1-1】对于传递函数为1212ssG的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。本例演示:(A)图形界面的大致生成过程;(B)静态文本和编辑框的生成;(C)坐标方格控制键的形成;(D)如何使用该界面。(1)clfresetH=axes('unit','normalized','position',[0,0,1,1],'visible','off');set(gcf,'currentaxes',H);str='\fontname{隶书}归一化二阶系统的阶跃响应曲线';text(0.12,0.93,str,'fontsize',13);2h_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',[015],'ylim',[01.8],'fontsize',8);图10.1-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;',...'fork=1:length(z);',...'y(:,k)=step(1,[12*z(k)1],t);',...'plot(t,y(:,k));',...'if(length(z)1),holdon,end,',...'end;',...'holdoff,']);图10.1-23(3)h_push1=uicontrol(h_fig,'style','push',...'unit','normalized','position',[0.67,0.37,0.12,0.15],...'string','gridon','callback','gridon');h_push2=uicontrol(h_fig,'style','push',...'unit','normalized','position',[0.67,0.15,0.12,0.15],...'string','gridoff','callback','gridoff');图10.1-3(4)图10.1-44图10.1-510.2图形用户界面的设计原则和一般步骤10.2.1设计原则(1)简单性(2)一致性(3)习常性(4)其它考虑因素10.2.2一般制作步骤10.3界面菜单(uimenu)10.3.1图形窗的标准菜单【例10.3.1-1】本例说明:如何隐藏和恢复标准菜单的显示。(1)H_fig=figure(2)set(H_fig,'MenuBar','none');set(gcf,'menubar',menubar);(3)set(gcf,'menubar','figure');图10.3-1图10.3-210.3.2自制的用户菜单【例10.3.2-1】本例演示:如何自制一个带下拉菜单表的用户菜单(如图10.3-3所示)。该菜单能使图形窗背景颜色设置为兰色或红色。figureh_menu=uimenu(gcf,'label','Color');%2h_submenu1=uimenu(h_menu,'label','Blue',...%35'callback','set(gcf,''Color'',''blue'')');%4h_submenu2=uimenu(h_menu,'label','Red',...%5'callback','set(gcf,''Color'',''red'')');%6图10.3-310.3.3用户菜单的属性10.3.3.1回调属性和菜单名(1)菜单名属性(2)回调属性【例10.3.3.1-1】本例的目标是:在图形窗上自制一个名为【Test】的“顶层菜单项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。通过本例说明:(A)回调属性的运作机理;(B)用户顶层菜单项的制作(C)uimenu属性的设置方法;(D)复杂字符串的构成方法和注意事项。(1)gridon,set(gca,'box','on')图10.3-4(2)eval('gridon,set(gca,''box'',''on'')')(3)uimenu('Label','Test','Callback','gridon,set(gca,''box'',''on''),')6图10.3-5(4)uimenu('Label','Test',...'Callback',['gridon,',...'set(gca,''box'',''on'');'])(5)Lpv='Test';Cpv=['gridon,','set(gca,''box'',''on''),'];uimenu('Label',Lpv,'Callback',Cpv)(6)PS.Label='Test';PS.Callback=['gridon;','set(gca,''box'',''on'');'];uimenu(PS)10.3.3.2设置简捷键或快捷键【例10.3.3.2-1】本例目标:使图10.3-3所示菜单成为图10.3-6那样,Color菜单项及其下拉的Blue菜单各带一个简捷键,而另一项下拉菜单Red带一个快捷键。[exm100332_1.m]figureh_menu=uimenu(gcf,'Label','&Color');%2h_submenu1=uimenu(h_menu,'Label','&Blue',...%3'Callback','set(gcf,''color'',''blue'')');h_submenu2=uimenu(h_menu,'label','Red',...'Callback','set(gcf,''color'',''red'')',...'Accelerator','r');%77图10.3-610.3.3.3用户菜单的外观设计【例10.3.3.3-1】本例演示:(A)把用户菜单'Option'设置为顶层的第3菜单项;(B)下拉菜单被两条分隔线分为三个菜单区;(C)最下菜单项又有两个子菜单组成。(1)[exm100333_1.m]figureBackColor=get(gcf,'Color');h_menu=uimenu('label','Option','Position',3);h_sub1=uimenu(h_menu,'label','gridon','callback','gridon');h_sub2=uimenu(h_menu,'label','gridoff','callback','gridon');h_sub3=uimenu(h_menu,'label','boxon','callback','boxon',...'separator','on');%6h_sub4=uimenu(h_menu,'label','boxoff','callback','boxoff');h_sub5=uimenu(h_menu,'label','FigureColor','Separator','on');%8h_subsub1=uimenu(h_sub5,'label','Red','ForeGroundColor','r',...%9'callback','set(gcf,''Color'',''r'')');h_subsub2=uimenu(h_sub5,'label','Reset',...'callback','set(gcf,''Color'',BackColor)');图10.3-7(2)Pos_O=get(h_menu,'position'),%查询Option菜单位置值Pos_BoxOn=get(h_sub3,'position')%查询boxob子菜单位置值Pos_Red=get(h_subsub1,'position')%查询red子菜单的位置值Pos_O=3Pos_BoxOn=3Pos_Red=1【例10.3.3.3-2】本例演示:当某菜单项选中后,如何使该菜单项贴上检录符“√”。[exm100333_2.m]figureh_menu=uimenu('label','Option');h_sub1=uimenu(h_menu,'label','Gridon',...%38'callback',[...'gridon,',...'set(h_sub1,''checked'',''on''),',...'set(h_sub2,''checked'',''off''),',...]);h_sub2=uimenu(h_menu,'label','Gridoff',...%4'callback',[...'gridoff,',...'set(h_sub2,''checked'',''on''),',...'set(h_sub1,''checked'',''off''),',...]);图10.3-810.3.3.4使能(Enable)与可见性(Visible)属性【例10.3.3.4-1】本例目标:制作一个带四个子菜单项的顶层菜单项;该下拉菜单分为两个功能区;每个功能区的两个菜单项是相互对立的
本文标题:matlab教程详解(9)
链接地址:https://www.777doc.com/doc-2887539 .html