设为首页   加入最爱           最新更新:全方位英文文章资料库
 
资料坊搜索: 标题 全文     
Matlab 由M函数文件产生用户菜单和控件
   首页>>YesizeCOM>>电脑技能坊>>MATLAB>>正文       
 
广告招租,e-mail:yesize@hotmail.com

广告招租,e-mail:yesize@hotmail.com


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

【 * 例 11.5.3-2 】目标:利用 M 函数文件创建与例 11.4.3.3-1 相同的用户界面。本例演示:如何依靠 Tag 属性 与 findobj 指令的配合使用获取回调操作所必须的控件图柄,保证回调动作正确执行。
本例的程序可由 exm1153_1.m 做如下修改而得:

(1)删去 exm1153_1.m 的指令 <34><36> 。
(2)在 exm1153_1.m 的 <20> 和 <21> 行之间增添一行
Tag , H_edit , ...

(3)在 exm1153_1.m 的 <23> 和 <24> 行之间增添一行
Tag , H_popup , ...

(4)在 exm1153_1.m 的 <27> 和 <28> 行之间增添一行
Tag , H_list , ...

(5)把 exm1153_1.m 的 <31><32><33> 条指令中的 exm1153_1 改为 exm1153_2 。

(6)在 exm1153_1.m 的 <35> 和 <37> 行之间增添以下三条指令。

H(1)=findobj(gcf, Tag , H_edit );
H(2)=findobj(gcf, Tag , H_popup );
H(3)=findobj(gcf, Tag , H_list );

(7)把 exm1153_1.m 的函数头修改为
function exm1153_2(flag)

(8)把修改后的文件“另存为” exm1153_2.m ,就完成了新文件的编写。 ( 9 )在 MATLAB 指令窗中运行 exm1153_2 就可获得题目所要求的图形用户界面。
上一篇:Matlab 用户控件(uicontrol) 下一篇:Matlab 图形用户界面设计工具

版权说明:作品来源于网上,版权归作者所有,如果无意中侵犯了您的版权,请来信告知,本站将在3个工作日内删除。yesize@hotmail.com
  热门小游戏分类 
射击小游戏 连连看小游戏
台球小游戏 成人小游戏
CS小游戏 化妆小游戏
赛车小游戏 休闲小游戏
篮球小游戏 换装小游戏
儿童小游戏 牛牛小游戏
麻将小游戏 冒险小游戏
美媚小游戏 益智小游戏
体育小游戏  
Society Recreation & Sports
Travel & Leisure Communications
Vehicles Computers
Fashion Arts & Entertainment
Reference & Education Disease & Illness
Writing & Speaking Politics
Product Reviews Food & Beverage
Finance Internet Business
Self Improvement Home & Family
Health & Fitness Business
最新更新内容
警惕“公务员报考热”背
公务员考试不是丈母娘考
一名新公务员的自白:我
公务员考脑筋急转弯与挂
北努斗:2006行政能力测
大讨论:06行测BT题目大
过来人回忆:当年,我也
一家之言:公务员热折射
公务员考试申论要是有正
数十万大学生走进公务员
      粤ICP备05005424         Copyright ©2000 - 2004 Yesize.COM