matlab axes函数gui中,如果要给一些参数初始赋值,得在哪一个模块?然后怎么样文本框、axes那些初始不显示呢?

查看: 15045|回复: 19|关注: 0
Matlab GUI 中怎么清空axes中的图形
本人是GUI新手,问大家一个问题,我的fig中有axes模块,我想知道就是我怎么能设置一个pushbotton,能在点击的情况下将此axes中的图形清空?
还有就是想问一下在GUI的axes模块中怎么同时显示画出的曲线的注释?
谢谢大家。
[ 本帖最后由 mooni 于
10:08 编辑 ]
关注者: 10
cla reset?
关注者: 62
回复 1# macrocaptain 的帖子
还有就是想问一下在GUI的axes模块中怎么同时显示画出的曲线的注释?
legend(); 具体的语法查看帮助文件.....
加一个clear
关注者: 4
您通过设置NextPlot的属性就可以实现
cla reset 就可以了,不需要加 clear
在程序中慎用clear ,否则会出一些不明的错误。
谢谢以上各位大大~~~
如果我用的这种方法呢?
axes('position',[0.08,0.3,0.4,0.4]);
impulse(sys1)
axes('position',[0.55,0.3,0.4,0.5]);
step(sys1)
怎么把两个图全去掉啊?
上面的问题我也有,如何清除指定的AXES呢?
站长推荐 /1
为其他会员撰写推荐,表示您认可他们对于论坛的出色贡献;
向其他坛友请求推荐,令您的声望页面更有说服力。
赶快学习新功能怎么用吧,推荐写起来!~
Powered by丁香客App是丁香园社区的官方应用,聚合了丁香园论坛和丁香客的精彩内容。医生可通过丁香客App浏览论坛,也可以在这个医生群集的关系网络中分享和互动,建立更广泛的学术圈子。
扫描二维码下载
今日:0 | 主题:87513 | & 收藏本版
每发1个新帖可以获得0.5个丁当奖励
【资源】Matlab GUI(图形用户界面) 的心得, 附 &编程中文参考手册&
【资源】Matlab GUI(图形用户界面) 的心得, 附 &编程中文参考手册&
分享到哪里?
这个帖子发布于10年零195天前,其中的信息可能已发生改变或有所发展。
Matlab GUI编程中文参考手册 先给大家介绍几句:一、GUI是什么。 Graphic User Interface, (图形用户界面) :其实GUI其实只是一个图形界面,能比较形象的,生动的把模拟、运算结果表现出来。它只是一个包装外壳。您开发的程序,最好用这个包装起来,这样别人用的时候会方便很多很多. 具体的算法,运算,分析是相对独立与GUI存在的。换句话说,GUI可以只有外壳,而没有内容;或者你预先做好的算法都可以套进一个做好的GUI里去。(当然,GUI也是由m文件构成的。) 但另一个方面,GUI是用来人机交流的界面。所以,用户具体的行为,比如运行某一功能,暂停,重置,弹菜单,切换机面等等,在GUI中要精心设计。逻辑要精密,考虑要全面。 二、开始设计GUI。 命令guide可以运行matlab的界面设计工具,这是一个所见即所得的工具(根据个人体会,位置稍有偏移,但制是非常小的范围内)。操作简单,拖拖放放,不用多言。存盘运行时,guide可以自动为你创建fig文件(可选)和主函数。值得一提的是物件布局工具(Align object),可以精确排列多个物件,包括对齐,间距等等。各种object包括menu,line等等一共有十几种。具体的细节可以参考matlab帮助,各自有自己的特性和用途。其中最重要的是Callback 性质。用button来举例,Callback就是按下按钮后,将会执行的功能。在guide中双击某个按钮,在弹出的属性设置窗口中就能找到Callback项目。你可以使用guide自动创建的函数。也可自己写一个m文件或者函数文件。把名称添到Callback即可。其它物件都类似。这一属性的设置,决定了大多数GUI的控制和行为。 Tag属性可以用来区别各个控件。 另外,enable,visiable,Position也是经常使用的属性。 关于这些属性,强烈建议仔细观看matlab的帮助文档。 另外,GUI也可以全手动设计(参照uimenu,ui。。。等一系列命令),但除非必要,不用那么累了,而且不是熟手,属性控制不熟练,反而效率低。个人认为还是guide和手动结合效果最好。 三、一些建议。 GUI设计中,Callback函数的参数传递设计比较重要。除了必要的处理数据外。就是句柄的传递了。matlab对所有的图形和物件都设置了句柄,所有的图形和物件的属性都可以通过各自唯一的句柄来取得和设置,切切!!详细参照,get,set,findobj,findall 等几个函数。 图形界面设计的美观固然重要。但是更重要的是其中的逻辑关系。比如按下某按钮会发生什么事情,其他按钮的状态如何?初始化后各个物件状态如何?图形销毁后要delete哪些数据,要保留那些数据?所以,如果要实现一个功能复杂的GUI,最好分成许多特征步骤。完成一个功能,调试一步,添加一个按钮,再调试一步。测试一定要全面,全面,全面。 四、一些要点。 1。设计GUI,mailab版本越高越好,bug少,功能全面。比如 uigeifile(还是uigetdir?记不清了。)在R12中就不支持。2。有问题了就看help,还有问题了再看help。-----------------------------------------------------------------------用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。图形用户界面(Graphical User Interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI的制作。但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。MATLAB为表现其基本功能而设计的演示程序demo 是使用图形界面的最好范例。MATLAB的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。即便比较熟悉MATLAB的读者,在他初次编写GUI程序时,也会感到棘手。为使读者获得制作自己GUI的体验,本章“入门”节提供了一个简单的示例。读者只要输入所提供的程序,就可引出相应的界面。本章第2节叙述图形用户界面的设计原则和一般制作步骤。第3、4节分别介绍用户菜单、用户控件的制作。出于“由浅入深”的考虑,前4节制作GUI是通过M脚本文件实现的。利用M函数文件制作GUI ,需要解决数据传递问题,为此专设第5节给予阐述和示例。MATLAB 5.x版为方便用户制作图形界面,提供了一个交互式的设计工具guide 。关于该工具的使用方法,被放在第6节中,以一个综合例题为设计目标逐步展开。在此提醒读者,假如要比较准确的理解本章程序和掌握本章内容,请先阅读第10章关于图柄的内容。11.1 入门【*例11.1-1】对于传递函数为 的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。本例演示:(A)图形界面的大致生成过程;(B)静态文本和编辑框的生成;(C)坐标方格控制键的形成;(D)如何使用该界面。(1)产生图形窗和轴位框:clf resetH=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);(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',...'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;',...'s2=tf(1,[1 2*z 1]); ',...'y(:,k)=step(s2,t);',...'plot(t,y(:,k));',...'if (length&1) ,hold on,end,',...'',...'hold off,']);(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'); 11.2 图形用户界面的设计原则和一般步骤11.2.1 设计原则11.2.2 一般制作步骤11.3 界面菜单(uimenu)11.3.1 图形窗的标准菜单【例11.3.1-1】本例说明:如何隐藏和恢复标准菜单的显示。(1)获得缺省设置的标准菜单figure(2)隐去标准菜单的两种方法set(H_fig , 'MenuBar','none');set(gcf,'menubar',menubar);(3)恢复图形窗上标准菜单set(gcf,'menubar','figure'); 11.3.2 自制的用户菜单【*例11.3.2-1】本例演示:如何自制一个带下拉菜单表的用户菜单(如图11.3.2-1所示)。该菜单能使图形窗背景颜色设置为兰色或红色。figure %创建一个图形窗h_menu=uimenu(gcf,'label','Color'); %制作用户顶层菜单项Color &2&h_submenu1=uimenu(h_menu,'label','Blue',... %制作下拉菜单项Blue &3&'callback','set(gcf,''Color'',''blue'')'); %&4&h_submenu2=uimenu(h_menu,'label','Red',... %制作下拉菜单Red &5&'callback','set(gcf,''Color'',''red'')'); %&6&11.3.3 用户菜单的属性11.3.3.1 回调属性和菜单名【*例11.3.3.1-1】本例的目标是:在图形窗上自制一个名为【Test】的“顶层菜单项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。通过本例说明:(A)回调属性的运作机理;(B)用户顶层菜单项的制作(C)uimenu属性的设置方法;(D)复杂字符串的构成方法和注意事项。(1)在MATLAB指令窗中运行以下程序可产生带分格的封闭坐标轴(见图11.3.3.1-1)grid on,set(gca,'box','on') (2)在MATLAB指令窗中用以下eval指令可产生与图11.3.3.1-1相同的界面eval('grid on,set(gca,''box'',''on'')') (3)uimenu的书写格式一:直接连续表示法uimenu('Label','Test','Callback','grid on,set(gca,''box'',''on''),') (4)uimenu的书写格式二:方括号续行号表示法uimenu('Label','Test', ...'Callback',['grid on,' , ...'set(gca,''box'',''on'');']) (5)uimenu的书写格式三:串变量法Lpv='Test';Cpv=['grid on,','set(gca,''box'',''on''),'];uimenu('Label', Lpv, 'Callback' , Cpv) (6)uimenu的书写格式四:构架表示法PS.Label='Test';PS.Callback=['','set(gca,''box'',''on'');'];uimenu(PS)  11.3.3.2 设置简捷键或快捷键【*例11.3.3.2-1】本例目标:使图11.3.2-1所示菜单成为图11.3.3.2-1那样,Color菜单项及其下拉的Blue菜单各带一个简捷键,而另一项下拉菜单Red带一个快捷键。[exm11332_1.m]figureh_menu=uimenu(gcf,'Label','&Color'); %带简捷键C的用户菜单Color &2&h_submenu1=uimenu(h_menu,'Label','&Blue',... %带简捷键B的的下拉菜单Blue &3&'Callback','set(gcf,''color'',''blue'')');h_submenu2=uimenu(h_menu,'label','Red',... %制作另一个下拉菜单Red'Callback','set(gcf,''color'',''red'')',...'Accelerator','r'); %为Red菜单设置快捷键R &7&11.3.3.3 用户菜单的外观设计【*例11.3.3.3-1】本例演示:(A)把用户菜单 'Option' 设置为顶层的第3菜单项;(B)下拉菜单被两条分隔线分为三个菜单区;(C)最下菜单项又有两个子菜单组成。(1)编写程序,生成如图11.3.3.3-1所示界面[exm11333_1.m]figureh_menu=uimenu('label','Option','Position',3);h_sub1=uimenu(h_menu,'label','grid on','callback','grid on');h_sub2=uimenu(h_menu,'label','grid off','callback','grid on');h_sub3=uimenu(h_menu,'label','box on','callback','box on',...'separator','on'); %&6&h_sub4=uimenu(h_menu,'label','box off','callback','box off');h_sub5=uimenu(h_menu,'label','Figure Color','Separator','on'); %&8&h_subsub1=uimenu(h_sub5,'label','Red','ForeGroundColor','r',... %&9&'callback','set(gcf,''Color'',''r'')');h_subsub2=uimenu(h_sub5,'label','Reset',...'callback','set(gcf,''Color'',''w'')');(2)位置属性的获取Pos_O=get(h_menu,'position'), %查询Option菜单位置值Pos_BoxOn=get(h_sub3,'position') %查询box ob子菜单位置值Pos_Red=get(h_subsub1,'position') %查询red子菜单的位置值 Pos_O =3Pos_BoxOn =3Pos_Red =1 【*例11.3.3.3-2】本例演示:当某菜单项选中后,如何使该菜单项贴上检录符“√”。[exm11333_2.m]figureh_menu=uimenu('label','Option');h_sub1=uimenu(h_menu,'label','Grid on',... %&3&'callback',[...'grid on,',...'set(h_sub1,''checked'',''on''),',...'set(h_sub2,''checked'',''off''),',...]);h_sub2=uimenu(h_menu,'label','Grid off',... %&4&'callback',[...'grid off,',...'set(h_sub2,''checked'',''on''),',...'set(h_sub1,''checked'',''off''),',...]); 11.3.3.4 使能(Enable)与可见性(Visible)属性【*例11.3.3.4-1】 本例目标:制作一个带四个子菜单项的顶层菜单项;该下拉菜单分为两个功能区;每个功能区的两个菜单项是相互对立的,因此采用使能属性处理;当图形窗坐标轴消隐时,整个坐标分隔控制功能区不可见。(1)编写如下脚本M文件exm11334_1.m[exm11334_1.m]clfh_menu=uimenu('label','Option'); %产生顶层菜单项Optionh_sub1=uimenu(h_menu,'label','Axis on'); %产生Axis on菜单项,由缺省设置而使能h_sub2=uimenu(h_menu,'label','Axis off',...'enable','off'); %产生Axis off菜单项,但失能h_sub3=uimenu(h_menu,'label','Grid on',...'separator','on','visible','off'); %产生与上分隔的Grid on菜单项,但不可见h_sub4=uimenu(h_menu,'label','Grid off',...'visible','off'); %产生Grid off菜单项,但不可见set(h_sub1,'callback',[... %选中Axis on菜单项后,产生回调操作'Axis on,',... %画坐标'set(h_sub1,''enable'',''off''),',... %Axis on菜单项失能'set(h_sub2,''enable'',''on''),',... %Axis off菜单项使能'set(h_sub3,''visible'',''on''),',... %Grid on菜单项可见'set(h_sub4,''visible'',''on''),']); %Grid off菜单项可见set(h_sub2,'callback',[... % %选中Axis off菜单项后,产生回调操作 'axis off,',... %使坐标消失'set(h_sub1,''enable'',''on''),',... %Axis on菜单项使能'set(h_sub2,''enable'',''off''),',... %Axis off菜单项失能'set(h_sub3,''visible'',''off''),',... %Grid on菜单项不可见'set(h_sub4,''visible'',''off''),']); %Grid off菜单项不可见set(h_sub3,'callback',[... %选中Grid on菜单项后,产生回调'grid on,',... %画坐标分格线'set(h_sub3,''enable'',''off''),',... %Grid on菜单项失能'set(h_sub4,''enable'',''on''),']); %Grid off菜单项使能set(h_sub4,'callback',[... %选中Grid off菜单项,产生回调'grid off,',... %消除坐标分格线'set(h_sub3,''enable'',''on''),',... %Grid on菜单项使能'set(h_sub4,''enable'',''off''),']); %Grid off菜单项失能 11.3.4 现场菜单的制作【*例11.3.4-1】目标:绘制一条Sa曲线,创建一个与之相联系的现场菜单,用以控制Sa曲线的颜色。(1)编写脚本M文件exm1134_1.m[exm1134_1.m]t=(-3*pi:pi/50:3*pi)+y=sin./t;hline=plot(t,y); %绘制Sa曲线cm= %创建现场菜单%制作具体菜单项,定义相应的回调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) %使cm现场菜单与Sa曲线相联系(3)将鼠标指针指向线条,点击鼠标右键的同时弹出现场菜单,在选中某菜单项(如Red)后,Sa曲线就改变(为红)颜色 11.4 用户控件(uicontrol)11.4.1 控件制作函数11.4.2 用户控件的种类11.4.3 控件制作示例11.4.3.1 双位按键、无线电按键、控件区域框示例【*例11.4.3.1-1】目标:创建一个界面包含4种控件:静态文本、“无线电”选择开关、双位按键、控件区域框。[exm11431_1.m]clf resetset(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*y=sin;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.2 静态文本框、滑动键、检录框示例【*例11.4.3.2-1】目标:制作演示“归一化二阶系统单位阶跃响应”的交互界面。在该界面中,阻尼比可在[0.02,2.02]中连续调节,标志当前阻尼比值;可标志峰值时间和大小;可标志(响应从0到0.95所需的)上升时间。本例涉及以下主要内容:(A)静态文本的创建和实时改写。(B)滑动键的创建;'Max' 和 'Min' 的设置;'value' 的设置和获取。(C)检录框的创建;'value' 的获取。(D)受多个控件影响的回调操作。[exm11432_1.m]clf resetset(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;y=step(1,[1 2*z 1],t);plot(t,y);if vchk1 %假如峰值框被选中 &4&[ym,km]=max;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,{tstr})else %假如在设定时间范围内不能插值 &15&text(10,0.4*y(end),{'ymax --& 1';'tmax --& inf'})endendif 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.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'); %书写图形窗名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:4if vv;eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形endend  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''.');endswitch 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:4if vv;eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形endend % &50&end(2)在MATLAB指令窗中运行exm1153_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就可获得题目所要求的图形用户界面。11.6 图形用户界面设计工具11.6.1 界面设计工具的结构和调用指令11.6.1.1 界面设计工具的结构11.6.1.2 图形窗的激活态和受控态11.6.1.3 启动交互式编辑工具的指令11.6.2 交互式用户界面设计工具应用示例11.6.2.1 工序一:窗口初始位置和大小设计【例11.6.2.1-1】本例演示:界面设计工具guide 的启动和用户界面窗口初试几何制作。图11.6.2.1-1 属性编辑工具界面11.6.2.2 工序二:对象的几何布局【例11.6.2.2-1】整个用户界面的几何布局:“轴”、控件种类、相对位置及大致尺寸。本例演示:(A)设计工具控制面板上“新对象模块区”的图标的使用;(B)几何布局时不必太多考虑各对象的精细位置和大小。11.6.2.3 工序三:新建对象的属性设置【例11.6.2.3-1】控件关键属性的设置。本例演示:(A)属性编辑工具的使用。(B)当 'Callback' 属性值可用比较简单的MATLAB语句表达时,则直接填写;如果语句较多,表达复杂,那么就应采用一个待写的M函数名填写。本例中的回调都借助M函数文件实现。(C)当控件上有字符串标识时,应注意文字的对齐方式和注意字体大小,使外观上与对象大小协调。(D)控件的 'String' 属性字符串的输入格式。在这过程中,可能还要适当调整对象几何尺寸,使字符表现清晰醒目。(E) 'Units' 采用 'normalized' ,使得所有新建对象随所在图形窗按比例缩放。11.6.2.4 工序四:用户菜单的制作用户菜单制作工序比较独立,因此该工序可前可后,也可以与“工序一”相合并。【例11.6.2.4-1】用户菜单的制作。本例演示:菜单编辑工具的使用。在本例中菜单引起的回调都是直接、简单的MATLAB语句。11.6.2.5 工序五:新建图形对象的齐整化【例11.6.2.5-1】控件的齐整化。本例演示:演示“对齐编辑工具”的使用。11.6.2.6 工序六:回调函数的编写【例11.6.2.6-1】回调函数的编写。本例演示:从处理方便出发编写回调函数。(关于回调函数的详细讨论,请看第11.5节的三个算例)(1)弹出框的回调函数Mycolormap.m[Mycolormap.m]function Mycolormappopstr={'spring','summer','autumn','winter'}; %弹出框色图矩阵vpop=get(findobj(gcf,'Tag','PopupMenu1'),'value'); %获得选项的位置标识colormap(eval(popstr{vpop})) %采用弹出框所选色图(2)列表框和“Apply”按键配合的回调函数Myapply.m[Myapply.m]function Myapplyvlist=get(findobj(gcf,'Tag','Listbox1'),'value'); %获得选项位置向量liststr={'grid on','box on','hidden off','axis off'}; %列表框选项内容invstr={'grid off','box off','hidden on','axis on'}; %列表框的逆指令vv=zeros(1,4);vv(vlist)=1; for k=1:4if vv;eval(liststr{k});else eval(invstr{k});end %按列表选项影响图形end(3)动态编辑框的回调函数Myedit.m[Myedit.m]function Myeditct=get(findobj(gcf,'Tag','EditText1'),'string');eval(ct')11.6.2.7 工序七:界面功能的全面测试11.6.2.8 为读者提供的配套文件和数据(1)机器自动生成的主控文件[Mygui1.m]function fig = Mygui1()% This is the machine-generated representation of a Handle Graphics object% and its children. Note that handle values may change when these objects% are re-created. This may cause problems with any callbacks written to% depend on the value of the handle at the time the object was saved.% This problem is solved by saving the output as a FIG-file.%% To reopen this object, just type the name of the M-file at the MATLAB% prompt. The M-file and its associated MAT-file must be on your path.% % NOTE: certain newer features in MATLAB may not have been saved in this% M-file due to limitations of this format, which has been superseded by% FIG-files. Figures which have been annotated using the plot editor tools% are incompatible with the M-file/MAT-file format, and should be saved as% FIG-files.load Mygui1h0 = figure('Units','normalized', ...'Color',[0.5 0.9505], ...'Colormap',mat0, ...'FileName','F:\99\m5\Mygui1.m', ...'MenuBar','none', ...'Name','GUI工具设计的界面', ...'PaperPosition',[18 180 575.9 432], ...'PaperUnits','points', ...'Position',[0.. 0.35], ...'Tag','Fig1', ...'ToolBar','none');h1 = uimenu('Parent',h0, ...'Label','Zoom', ...'Tag','M_Z');h2 = uimenu('Parent',h1, ...'Callback','zoom on', ...'Label','On', ...'Tag','M_Zon');h2 = uimenu('Parent',h1, ...'Callback','zoom off', ...'Label','Off', ...'Tag','M_Zoff');h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'BackgroundColor',[0.6 0.6 0.6], ...'Callback','Mycolormap', ...'ListboxTop',0, ...'Position',[0..524 0.16 0.381], ...'String',['spring ';'summer ';'autumn ';'winter '], ...'Style','popupmenu', ...'Tag','PopupMenu1', ...'value',1);h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'BackgroundColor',[1 1 1], ...'Max',2, ...'Position',[0..952 0.16 0.524], ...'String',['grid on ';'box on ';'hidden off';'axis off '], ...'Style','listbox', ...'Tag','Listbox1', ...'value',1);h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'BackgroundColor',[.588 .588 .588], ...'Callback','Myapply', ...'ListboxTop',0, ...'Position',[0..12 0.16 0.15], ...'String','apply', ...'Tag','Pushbutton1');h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'BackgroundColor',[1 1 1], ...'Callback','Myedit', ...'FontName','Times New Roman', ...'FontSize',10, ...'HorizontalAlignment','left', ...'ListboxTop',0, ...'Max',2, ...'Position',[.24 . .9523], ...'Style','edit', ...'Tag','EditText1');h1 = axes('Parent',h0, ...'CameraUpVector',[0 1 0], ...'CameraUpVectorMode','manual', ...'Color',[1 1 1], ...'ColorOrder',mat1, ...'Position',[0.05 0.15 0.45 0.65], ...'Tag','Axes1', ...'XColor',[0 0 0], ...'YColor',[0 0 0], ...'ZColor',[0 0 0]);h2 = text('Parent',h1, ...'Color',[0 0 0], ...'HandleVisibility','off', ...'HorizontalAlignment','center', ...'Position',[0.1 9.386], ...'Tag','Axes1Text4', ...'VerticalAlignment','cap');set(get(h2,'Parent'),'XLabel',h2);h2 = text('Parent',h1, ...'Color',[0 0 0], ...'HandleVisibility','off', ...'HorizontalAlignment','center', ...'Position',[-0.8 9.386], ...'Rotation',90, ...'Tag','Axes1Text3', ...'VerticalAlignment','baseline');set(get(h2,'Parent'),'YLabel',h2);h2 = text('Parent',h1, ...'Color',[0 0 0], ...'HandleVisibility','off', ...'HorizontalAlignment','right', ...'Position',mat2, ...'Tag','Axes1Text2', ...'Visible','off');set(get(h2,'Parent'),'ZLabel',h2);h2 = text('Parent',h1, ...'Color',[0 0 0], ...'HandleVisibility','off', ...'HorizontalAlignment','center', ...'Position',[0. 9.386], ...'Tag','Axes1Text1', ...'VerticalAlignment','bottom');set(get(h2,'Parent'),'Title',h2);h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'FontName','隶书', ...'FontSize',13, ...'HorizontalAlignment','left', ...'ListboxTop',0, ...'Position',[0.55 0.8 0.2 0.12], ...'String','输入绘图指令', ...'Style','text', ...'Tag','StaticText1');h1 = uicontrol('Parent',h0, ...'Units','normalized', ...'BackgroundColor',[.588 .588 .588], ...'Callback','close(gcbf)', ...'ListboxTop',0, ...'Position',[0. 0.16 0.15], ...'String','Close', ...'Tag','Pushbutton2');if nargout & 0, fig = h0; end(2)配套数据文件[Myguizzy.m]function Myguizzy%假如Mygui1.m所在目录不是d:\matbook5\mdisk ,那么第&10&条就应做相应的改变。%一定要保证本函数生成的 Mygui1.mat 与 Mygui1.m 在同一目录。mat0=jet(64);mat1=[ 0 0 1.00000 0.5000 01.0 0.00..75000.0 00.0 0.2500];mat2=[-0.6 9.1603];save d:\matbook5\mdisk\Mygui1 %&10&l 把本节提供的Mygui1.m , Myguizzy.m , Mycolormap.m , Myapply.m , Myedit.m 五个文件放在MATLAB的搜索路径上。l 先运行Myguizzy.m ,创建数据文件Mygui1.mat 。l 运行Mygui1.m ,就可得到符合要求的界面。
wwwdbwww edited on
回复:【资源】Matlab GUI(图形用户界面) 的心得, 附 &编程中文参考手册&
分享到哪里?
好东西,我对GUI编程一直不太熟,正想找个好例子,谢谢
回复:【资源】Matlab GUI(图形用户界面) 的心得, 附 &编程中文参考手册&
分享到哪里?
wwwdbwww 先生,怎么没附“中文参考手册”
回复:【资源】Matlab GUI(图形用户界面) 的心得, 附 &编程中文参考手册&
分享到哪里?
wwwdbwww 先生,怎么没附“中文参考手册”
关于丁香园

我要回帖

更多关于 matlab axes 的文章

 

随机推荐