logo资料库

matlab gui设计实例.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
第十章 图形用户界面(GUI)制作
10.1入门
10.2图形用户界面的设计原则和一般步骤
10.2.1设计原则
10.2.2一般制作步骤
10.3界面菜单(uimenu)
10.3.1图形窗的标准菜单
10.3.2自制的用户菜单
10.3.3 用户菜单的属性
10.3.4现场菜单的制作
10.4用户控件(uicontrol)
10.4.1 控件制作函数
10.4.2 用户控件的种类
10.4.3 控件制作示例
一双位按键、无线电按键、控件区域框示例
二静态文本框、滑动键、检录框示例
三可编辑框、弹出框、列表框、按键示例
10.5图形用户界面设计工具
习题10
第十章 图形用户界面(GUI)制作 10.1 入门 【例 10.1-1】对于传递函数为 G  1 2 s   1 2 s  的归一化二阶系统,制作一个能绘制该系统 单位阶跃响应的图形用户界面。本例演示:(A)图形界面的大致生成过程;(B)静态文 本和编辑框的生成;(C)坐标网格控制键的形成;(D)如何使用该界面。 (1)产生图形窗和轴位框:如图 10.1-1 所示。 clf reset H=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',... 1
'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'); 2
图 10.1-3 添加了两个按键的图形界面 (4)输入阻尼比系数,可得单位阶跃响应曲线:如图 10.1-4 和图 10.1-5 所示。 图 10.1-4 输入标量阻尼比所得到的响应曲线 图 10.1-5 输入阻尼比数组所得到的一组响应曲线 10.2 图形用户界面的设计原则和一般步骤 3
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] figure h_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'); 4
图 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 的书写格式四: PS.Label='Test'; PS.Callback=['grid on;','set(gca,''box'',''on'');']; uimenu(PS) 10.3.4 【例 10.3-4】目标:绘制一条 Sa 曲线,创建一个与之相联系的现场菜单,用以控制 Sa 曲线 的颜色(图 10.3-5)。 现场菜单的制作 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 曲线。 图 10.3-5 Context 菜单 10.4 用户控件(uicontrol) 10.4.1 10.4.2 10.4.3 控件制作函数 用户控件的种类 控件制作示例 一 双位按键、无线电按键、控件区域框示例 【例 10.4-1】目标:创建一个界面(图 10.4-1)包含 4 种控件:静态文本、“无线电”选择 开关、双位按键、控件区域框。 编写 M 脚本文件 exm104_1.m ,运行该文件便可得如图 10.4-1 所示的界面。 [exm104_1.m] clf reset set(gcf,'menubar','none') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]); set(gcf,'defaultuicontrolunits','normalized') h_axes=axes('position',[0.05,0.2,0.6,0.6]); t=0:pi/50:2*pi;y=sin(t);plot(t,y); 6
set(h_axes,'xlim',[0,2*pi]); set(gcf,'defaultuicontrolhorizontal','left'); htitle=title('正弦曲线'); set(gcf,'defaultuicontrolfontsize',12); uicontrol('style','frame',... 'position',[0.67,0.55,0.25,0.25]); uicontrol('style','text',... 'string','正斜体图名:',... 'position',[0.68,0.77,0.18,0.1],... 'horizontal','left'); hr1=uicontrol(gcf,'style','radio',... 'string','正体',... 'position',[0.7,0.69,0.15,0.08]); set(hr1,'value',get(hr1,'Max')); set(hr1,'callback',[... 'set(hr1,''value'',get(hr1,''max'')),',... 'set(hr2,''value'',get(hr2,''min'')),',... 'set(htitle,''fontangle'',''normal''),',... ]); hr2=uicontrol(gcf,'style','radio',... 'string','斜体',... 'position',[0.7,0.58,0.15,0.08],... 'callback',[... 'set(hr1,''value'',get(hr1,''min'')),',... 'set(hr2,''value'',get(hr2,''max'')),',... 'set(htitle,''fontangle'',''italic'')',... ]); ht=uicontrol(gcf,'style','toggle',... 'string','Grid',... 'position',[0.67,0.40,0.15,0.12],... 'callback','grid'); 7
图 10.4-2 静态文本、滑动键以及检录框 二 静态文本框、滑动键、检录框示例 【例 10.4-2】目标:制作演示“归一化二阶系统单位阶跃响应”的交互界面(图 10.4-2)。 在该界面中,阻尼比可在[0.02,2.02]中连续调节,标志当前阻尼比值;可标志峰值时间和大 小;可标志(响应从 0 到 0.95 所需的)上升时间。本例涉及以下主要内容:(A)静态文本 的创建和实时改写。(B)滑动键的创建;'Max' 和 'Min' 的设置;'Value' 的设置和获取。(C) 检录框的创建;'Value' 的获取。(D)受多个控件影响的回调操作。 [exm104_2.m] clf reset set(gcf,'unit','normalized','position',[0.1,0.2,0.64,0.35]); set(gcf,'defaultuicontrolunits','normalized'); set(gcf,'defaultuicontrolfontsize',12); set(gcf,'defaultuicontrolfontname','隶书'); set(gcf,'defaultuicontrolhorizontal','left'); str='归一化二阶系统阶跃响应曲线'; set(gcf,'name',str,'numbertitle','off'); h_axes=axes('position',[0.05,0.2,0.6,0.7]); set(h_axes,'xlim',[0,15]); str1='当前阻尼比='; t=0:0.1:10;z=0.5;y=step(1,[1 2*z 1],t); hline=plot(t,y); htext=uicontrol(gcf,'style','text',... 'position',[0.67,0.8,0.33,0.1],... 'string',[str1,sprintf('%1.4g\',z)]); hslider=uicontrol(gcf,'style','slider',... 'position',[0.67,0.65,0.33,0.1],... 'max',2.02,'min',0.02,... 'sliderstep',[0.01,0.05],... 'Value',0.5); 8
分享到:
收藏