matlab中gui教程(3)

2019-03-22 17:43

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); set(h_axes,'xlim',[0,2*pi]);

set(gcf,'defaultuicontrolhorizontal','left'); htitle=title('正弦曲线');

set(gcf,'defaultuicontrolfontsize',12); %设置用户缺省控件字体属性值 uicontrol('style','frame',... %创建用户控件区 <11> 'position',[0.67,0.55,0.25,0.25]);

uicontrol('style','text',... %创建静态文本框 <13> 'string','正斜体图名:',...

'position',[0.68,0.77,0.18,0.1],...

'horizontal','left'); hr1=uicontrol(gcf,'style','radio',... %创建“无线电”选择按键 <17> 'string','正体',... %按键功能的文字标识'正体' 'position',[0.7,0.69,0.15,0.08]); %按键位置

set(hr1,'value',get(hr1,'Max'));%因图名缺省使用正体,所以小圆圈应被点黑 <20> set(hr1,'callback',[... % <21> 'set(hr1,''value'',get(hr1,''max'')),',... %选中将小圆圈点黑 <22> 'set(hr2,''value'',get(hr2,''min'')),',... %将“互斥”选项点白 <23> 'set(htitle,''fontangle'',''normal''),',... %使图名字体正体显示 ]); hr2=uicontrol(gcf,'style','radio',... %创建“无线电”选择按键 <26> 'string','斜体',... %按键功能的文字标识'斜体' 'position',[0.7,0.58,0.15,0.08],... %按键位置 'callback',[...

'set(hr1,''value'',get(hr1,''min'')),',... % <30> 'set(hr2,''value'',get(hr2,''max'')),',... % <31> 'set(htitle,''fontangle'',''italic'')',... %使图名字体斜体显示

]); % <33> ht=uicontrol(gcf,'style','toggle',... %制作双位按键 <34> 'string','Grid',...

'position',[0.67,0.40,0.15,0.12],... 'callback','grid');

图 11.4.3.1-1 静态文本、选择开关、双位按键及控件区域框

11.4.3.2 静态文本框、滑动键、检录框示例

11

【*例11.4.3.2-1】目标:制作演示“归一化二阶系统单位阶跃响应”的交互界面。在该界面中,阻尼比可在[0.02,2.02]中连续调节,标志当前阻尼比值;可标志峰值时间和大小;可标志(响应从0到0.95所需的)上升时间。本例涉及以下主要内容:(A)静态文本的创建和实时改写。(B)滑动键的创建;'Max' 和 'Min' 的设置;'Value' 的设置和获取。(C)检录框的创建;'Value' 的获取。(D)受多个控件影响的回调操作。 [exm11432_1.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',... %制作静态说明文本框 <14> 'position',[0.67,0.8,0.33,0.1],... 'string',[str1,sprintf('%1.4g\\',z)]);

hslider=uicontrol(gcf,'style','slider',... %创建滑动键 <17> 'position',[0.67,0.65,0.33,0.1],...

'max',2.02,'min',0.02,... %设最大阻尼比为2,最小阻尼比为0.02 <19> 'sliderstep',[0.01,0.05],...%箭头操纵滑动步长1%,游标滑动步长5% <20> 'Value',0.5); %缺省取阻尼比等于0.5 <21> hcheck1=uicontrol(gcf,'style','checkbox',... %创建峰值检录框 <22> 'string','最大峰值' ,...

'position',[0.67,0.50,0.33,0.11]); vchk1=get(hcheck1,'value'); %获得峰值检录框的状态值 <25> hcheck2=uicontrol(gcf,'style','checkbox',... %创建上升时间检录框 <26> 'string','上升时间(0->0.95)',... 'position',[0.67,0.35,0.33,0.11]);

vchk2=get(hcheck2,'value'); %获得上升时间检录框的状态值 <29> set(hslider,'callback',[... %操作滑动键,引起回调 <30> 'z=get(gcbo,''value'');',... %获得滑动键状态值 <31> 'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <32> set(hcheck1,'callback',[... %操作峰值检录框,引起回调 <33> 'vchk1=get(gcbo,''value'');',... %获得峰值检录框状态值 <34> 'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <35> set(hcheck2,'callback',[... %操作峰值检录框,引起回调 <36> 'vchk2=get(gcbo,''value'');',... %获得峰值检录框状态值 <37> 'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <38>

[callcheck.m]

function callcheck(htext,str1,z,vchk1,vchk2)

cla,set(htext,'string',[str1,sprintf('%1.4g\\',z)]); %更新静态文本框内容 <2> dt=0.1;t=0:dt:15;N=length(t);y=step(1,[1 2*z 1],t);plot(t,y);

if vchk1 %假如峰值框被选中 <4>

12

[ym,km]=max(y);

if km<(N-3) %假如在设定时间范围内能插值 <6> k1=km-3;k2=km+3;k12=k1:k2;tt=t(k12); yy=spline(t(k12),y(k12),tt); %局部样条插值 <8> [yym,kkm]=max(yy); %求更精确的峰值位置

line(tt(kkm),yym,'marker','.',... %画峰值点 <10> 'markeredgecolor','r','markersize',20); ystr=['ymax = ',sprintf('%1.4g\\',yym)]; tstr=['tmax = ',sprintf('%1.4g\\',tt(kkm))]; text(tt(kkm),1.05*yym,{ystr;tstr})

else %假如在设定时间范围内不能插值 <15> text(10,0.4*y(end),{'ymax --> 1';'tmax --> inf'}) end end

if vchk2 %假如上升时间框被选中 <19> k95=min(find(y>0.95));k952=[(k95-1),k95]; t95=interp1(y(k952),t(k952),0.95); %线性插值 <21> line(t95,0.95,'marker','o','markeredgecolor','k','markersize',6); tstr95=['t95 = ',sprintf('%1.4g\\',t95)]; text(t95,0.65,tstr95) end

图11.4.3.2-1

11.4.3.3 可编辑框、弹出框、列表框、按键示例

【*例11.4.3.3-1】目标:制作一个能绘制任意图形的交互界面。它包括:可编辑文本框、弹出框、列表框。本例的关键内容是:如何使编辑框允许输入多行指令。 [exm11433_1.m]

clf reset % <1> set(gcf,'unit','normalized','position',[0.1,0.4,0.85,0.35]);%设置图形窗大小 set(gcf,'defaultuicontrolunits','normalized'); set(gcf,'defaultuicontrolfontsize',11); set(gcf,'defaultuicontrolfontname','隶书'); set(gcf,'defaultuicontrolhorizontal','left');

set(gcf,'menubar','none'); %删除图形窗工具条 str='通过多行指令绘图的交互界面';

set(gcf,'name',str,'numbertitle','off'); %书写图形窗名

13

h_axes=axes('position',[0.05,0.15,0.45,0.70],'visible','off');%定义轴位框位置 uicontrol(gcf,'Style','text',... %制作静态文本框 'position',[0.52,0.87,0.26,0.1],... 'String','绘图指令输入框');

hedit=uicontrol(gcf,'Style','edit',... %制作可编辑文本框 <14> 'position',[0.52,0.05,0.26,0.8],...

'Max',2); %取2,使Max-Min>1,而允许多行输入 <16> hpop=uicontrol(gcf,'style','popup',... %制作弹出菜单 <17> 'position',[0.8,0.73,0.18,0.12],...

'string','spring|summer|autumn|winter');%设置弹出框中选项名 <19> hlist=uicontrol(gcf,'Style','list',... %制作列表框 <20> 'position',[0.8,0.23,0.18,0.37],...

'string','Grid on|Box on|Hidden off|Axis off',...%设置列表框中选项名 <22> 'Max',2); %取2,使Max-Min>1,而允许多项选择 <23> hpush=uicontrol(gcf,'Style','push',... %制作与列表框配用的按键 <24> 'position',[0.8,0.05,0.18,0.15],'string','Apply'); set(hedit,'callback','calledit(hedit,hpop,hlist)'); %编辑框输入引起回调 <26> set(hpop,'callback','calledit(hedit,hpop,hlist)'); %弹出框选择引起回调 <27> set(hpush,'callback','calledit(hedit,hpop,hlist)'); %按键引起的回调 <28>

[calledit.m]

function calledit(hedit,hpop,hlist)

ct=get(hedit,'string'); %获得输入的字符串函数 <2> vpop=get(hpop,'value'); %获得选项的位置标识 <3> vlist=get(hlist,'value'); %获得选项位置向量 <4> if ~isempty(ct) %可编辑框输入非空时 <5> eval(ct') %运行从编辑文本框送入的指令 <6> popstr={'spring','summer','autumn','winter'}; %弹出框色图矩阵 <7> liststr={'grid on','box on','hidden off','axis off'};%列表框选项内容 <8> invstr={'grid off','box off','hidden on','axis on'};%列表框的逆指令 <9> colormap(eval(popstr{vpop})) %采用弹出框所选色图 <10> vv=zeros(1,4);vv(vlist)=1; for k=1:4

if vv(k);eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形 end end

图 11.4.3.3-1

14

11.5 由M函数文件产生用户菜单和控件

11.5.1 利用全局变量编写用户界面函数文件

【*例11.5.1-1】目标:利用M函数文件创建与例11.4.3.3-1相同的用户界面。本例演示:如何依靠全局变量传递控件的图柄,从而保证回调动作正确执行。 (1)编写M函数文件exm1151_1.m和calledit1.m [exm1151_1.m]

function exm1151_1( ) global hedit hpop hlist

(这中间是:原exm11433_1.m第〈1〉行到第〈25〉行的全部指令) set(hedit,'callback','calledit1'); %编辑框输入引起回调 <26> set(hpop,'callback','calledit1'); %弹出框选择引起回调 <27> set(hpush,'callback','calledit1'); %按键引起的回调 <28>

[calledit1.m]

function calledit1( ) global hedit hpop hlist

(下面续接内容是:原calledit.m第〈2〉行以下的全部指令)

(2)在MATLAB指令窗中运行exm1151_1就可获得题目所要求的图形用户界面。

11.5.2 利用 'UserData' 属性编写用户界面函数文件

【*例11.5.2-1】目标:利用M函数文件创建与例11.4.3.3-1相同的用户界面。本例演示:如何依靠图形窗的'UserData' 属性传送用户控件的图柄,从而保证回调动作正确执行。 (1)编写M函数文件exm1152_1.m和calledit2.m [exm1152_1.m]

function exm1152_1( )

(这中间是:原exm11433_1.m第〈1〉行到第〈25〉行的全部指令) set(hedit,'callback','calledit2'); %编辑框输入引起回调 <26> set(hpop,'callback','calledit2'); %弹出框选择引起回调 <27> set(hpush,'callback','calledit2'); %按键引起的回调 <28> set(gcf,'UserData',[hedit,hpop,hlist])

[calledit2.m]

function calledit2( ) H=get(gcf,'UserData');

ct=get(H(1),'string'); %获得输入的字符串函数 <2> vpop=get(H(2),'value'); %获得选项的位置标识 <3> vlist=get(H(3),'value'); %获得选项位置向量 <4> (下面续接内容是:原calledit.m第〈5〉行以下的全部指令)

(2)在MATLAB指令窗中运行exm1152_1就可获得题目所要求的图形用户界面。

15


matlab中gui教程(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何练好接发球(张晓鹏)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: