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就可获得题目所要求的图形用户界面。
11.5.3 利用递归法编写用户界面函数文件 【*例11.5.3-1】目标:利用M函数文件创建与例11.4.3.3-1相同的用户界面。本例演示:如何依靠图形窗'UserData' 属性在递归调用中传送用户控件的图柄,保证回调动作正确执行。 (1)编写M函数文件exm1153_1.m [exm1153_1.m] function exm1153_1(flag) if nargin<1;flag='startup';end %允许在无输入宗量形式下调用该函数 <2> if ~ischar(flag);error('flag must be character ''startup''.');end switch flag %切换控制 <4> case 'startup' % <5> clf reset % <6> 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'); %书写图形窗名 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',... %制作可编辑文本框 <19> 'position',[0.52,0.05,0.26,0.8],... % <20> 'Max',2); %取2,使Max-Min>1,而允许多行输入 <21> hpop=uicontrol(gcf,'style','popup',... %制作弹出菜单 <22> 'position',[0.8,0.73,0.18,0.12],... % <23> 'string','spring|summer|autumn|winter');%设置弹出框中选项名 <24> hlist=uicontrol(gcf,'Style','list',... %制作列表框 <25> 'position',[0.8,0.23,0.18,0.37],... % <26> 'string','Grid on|Box on|Hidden off|Axis off',...%设置列表框中选项名 <27> 'Max',2); %取2,使Max-Min>1,而允许多项选择 <28> hpush=uicontrol(gcf,'Style','push',... %制作与列表框配用的按键 <29> 'position',[0.8,0.05,0.18,0.15],'string','Apply'); set(hedit,'callback','exm1153_1(''set'')'); %编辑框输入引起回调 <31> set(hpop,'callback','exm1153_1(''set'')'); %弹出框选择引起回调 <32> set(hpush,'callback','exm1153_1(''set'')'); %按键引起的回调 <33> set(gcf,'UserData',[hedit,hpop,hlist]); %向'UserData'存放图柄 <34> case 'set' %以下是回调函数 <35> H=get(gcf,'UserData'); %从'UserData'获取图柄 <36> ct=get(H(1),'string'); %获得输入的字符串函数 <37> vpop=get(H(2),'value'); %获得选项的位置标识 <38> vlist=get(H(3),'value'); %获得选项位置向量 <39> if ~isempty(ct) eval(ct') %运行从编辑文本框送入的指令 popstr={'spring','summer','autumn','winter'}; %弹出框色图矩阵 liststr={'grid on','box on','hidden off','axis off'};%列表框选项内容 invstr={'grid off','box off','hidden on','axis on'};%列表框的逆指令 colormap(eval(popstr{vpop})) %采用弹出框所选色图 vv=zeros(1,4);vv(vlist)=1; for k=1:4 if vv(k);eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形 end end % <50> end (2)在MATLAB指令窗中运行exm1153_1就可获得题目所要求的图形用户界面(即图11.4.3.3-1无图形时的初始界面)。
(责任编辑:泉水) |