我们热爱生命科学!-生物行

[推荐] Matlab GUI编程中文参考手册(5)

时间:2006-01-11 15:51来源:Internet 作者:bioguider 点击: 1992次

 

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无图形时的初始界面)。

(责任编辑:泉水)
顶一下
(19)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片