null第七章 Matlab的图形用户界面GUI第七章 Matlab的图形用户界面GUI GUI设计工具简介
GUI向导设计
GUI程序设计 第一节 GUI设计工具简介第一节 GUI设计工具简介图7-1 进入GUI的初始界面一、启动GUInull图7-2 空白界面编辑器外观图null二、用户界面控件对象按钮:
开关按钮:
单选按钮:
动态文本框:
弹出式菜单:
null图文框静态文本框列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
框复选框滑动条按钮组null图7-3 带有控件的图形界面编辑器外观图null图7-4 排列工具栏外观图三、几何位置排列工具null四、用属性编辑器设置控件属性图7-5 属性编辑器外观图null五、菜单编辑器
图7-6 菜单编辑器界面图null1.创建菜单栏菜单
图7-7 下拉式菜单创建图null2.创建上下文菜单
图7-8 上下文菜单创建图null六、对象浏览器
图7-9 对象浏览器第二节 GUI向导设计第二节 GUI向导设计 【例7-1】 设计一个带有三个按钮和一个坐标轴的图形用户界面,当用鼠标点击三个按钮时,分别在坐标轴内画sphere,peaks和membrane三个图形。
创建控件
带有1个坐标轴和3个按钮的界面如图7-10所示。null图7-10 GUI界面设计编辑器外观图null 设置按钮属性
图7-11 按钮属性编辑器外观图null图7-12 修改按钮1“String”属性值截图图7-13 修改按钮的“string”属性值后的图形界面编辑器外观null编写回调程序
属性设置完毕后,点击菜单栏上的保存按钮会弹出“save as”对话框,如图7-14所示,文件命名为myGUI。图 7-14 保存图形界面的对话框图null同时,Matlab会自动创建一个同名的M文件,并且自动打开,如图7-15所示。图7-15 自动生成的M文件null图7-16 按钮1的回调子函数定位图null按钮1“sphere”的回调程序为:
sphere;
axis tight;
按钮2“peaks”的回调程序为:
peaks;
axis tight;
按钮3“membrane”的回调程序为:
membrane;
axis tight;null图7-17 M文件编辑器中的三个按钮的回调子函数null
(a) (b)
(c) (d)
图7-18 运行结果
(a) 被激活后的界面; (b) sphere图; (c) peaks图; (d) membrane图 第三节 GUI程序设计第三节 GUI程序设计1. 用户界面菜单对象的建立
h=uimenu(’ PropertyName1’,value1,
’ propertyName2’,value2,…)
【例7-2】 建立一个包含用户界面菜单项的图形界面,并可执行菜单项的相应功能,分别绘制membrane、peaks和sinc函数图形。
Matlab程序如下:
null% 首先建立一个图形窗口
h0=figure('menubar','none','toolbar','none','name','myfirstGUI');
% 建立【Draw】菜单和其下的【Membrane】【Peaks】
和【Sinc】子菜单项
h1=uimenu(h0,'label','Draw');h11=uimenu(h1,'label','Membrane','callback','membrane');h12=uimenu(h1,'label','Peaks','callback','peaks');h13=uimenu(h1,'label','Sinc','callback',...
['[x,y]=meshgrid(-5:0.5:5);','r=sqrt(x.^2+y.^2)+eps;',...
'z=sin(r)./r;','surf(z);']);
该段代码运行后,生成如图7-19所示的带菜单界面图。 null图7-19 生成“membrane”的图形界面 null% 建立第二个菜单【Colormap】及其下的【Cool】【Hot】【Default】子菜单项
h2=uimenu(h0,'label','ColorMap');
h22(1)=uimenu(h2,'label','Hot','callback',...
['set(h22,''checked'',''off'');',...
'set(h22(1),''checked'',''on'');','colormap(hot);']);
h22(2)=uimenu(h2,'label','Cool',... 'callback',...
['set(h22,''checked'',''off'');','set(h22(2),' 'checked' ',' 'on' '); ', ... 'colormap(cool); ']);
h22(3)=uimenu(h2,'label','Spring',…
'callback',['set(h22,' 'checked' ', ''off' '); ',…
'set(h22(3),''checked'',''on'');','colormap(spring);']);
该段代码运行后,生成如图7-20所示的界面图。 null图7-20 生成“hot”效果的图形界面 null% 建立控制坐标轴的显示菜单【Axis】
h3=uimenu(h0,'label','Axis');
h31=uimenu(h3,'label','Axis on','callback','axis on');
h32=uimenu(h3,'label','Axis off','callback','axis off');
该段代码运行后,生成如图7-21所示的界面图。 图7-21 生成带坐标轴的图形界面 null% 建立关闭图形用户界面按钮【close】hbutton=uicontrol('position',[80 30 60 30],'string','close','fontsize',8,'fontweight','bold','callback','close');
说明:本PPT中, M文件的代码在换行时有的保留了“...”,
有的没有,但在MATLAB环境下,若一行太长,换行
前一定要加3个点“...” 再回车。
null2. 用户界面上下文菜单的建立
生成上下文菜单步骤如下:
① 利用函数uicontextmenu创建上下文菜单对象;
② 利用函数uimenu为该上下文菜单对象制作具
体的 菜单项;
③ 利用函数set将该上下文菜单对象和某些图形
对象联系在一起。
null【例7-3】 在一个图形窗口内绘制抛物线和余弦曲线,并创建一
个与之相联系的上下文菜单,用于控制线条的颜色、线宽、线型
及标记点风格。
Matlab程序如下:
% 画曲线y1,并设置其句柄
t=-1:0.1:1;subplot(2,1,1);y1=t.^2;h_line1=plot(t,y1)
% 建立上下文菜单
uimenu(h,'label','red','callback','set(h_line1,' 'color' ',' 'r' ') ');
uimenu(h,'label','green','callback','set(h_line1,' 'color' ',' 'g' ') ');
uimenu(h,'label','yellow','callback','set(h_line1,' 'color' ',' 'y' ') ');
uimenu(h,'label','linewidth1.5','callback',…'set(h_line1,' 'linewidth' ', 1.5) ');
uimenu(h,'label',‘linestyle*','callback',…'set(h_line1,' ' linestyle ' ' ,
' '*' ') ');
uimenu(h,'label','linestyle:','callback',…'set(h_line1,' ' linestyle ' ' ,
' ' : ' ') ');
uimenu(h,'label','marker','callback','set(h_line1, ' ' marker ' ' , ' ' s ' ') ');
set(h_line1,'uicontextmenu',h) % 使上下文菜单与正弦曲线h_line1相联系 null
title('抛物线和余弦曲线','fontweight','bold','fontsize',14)
set(gca,‘xtick’,[-1:0.5:1]) % 设置坐标轴的标度范围
% 设置坐标轴的标度值
set(gca,‘xticklabel’,{‘-1’,‘0.5’,‘0’,‘0.5’,‘1’})
% 画曲线y2, 并设置其句柄
subplot(2,1,2)t=0:.1:2*pi;y2=cos(t);h_line2=plot(t,y2)
h=uicontextmenu;
uimenu(h,'label','red','callback','set(h_line2,''color'',''r'')');
uimenu(h,'label','crimson','callback','set(h_line2,''color'',''m'')');
uimenu(h,'label','black','callback','set(h_line2,''color'',''k'')');null
uimenu(h,'label','linewidth1.5','callback',…
'set(h_line2,''linewidth'',1.5)');
uimenu(h,'label','linestyle*','callback',…
'set(h_line2,''linestyle'',''*'')');
uimenu(h,'label','linestyle:','callback',…
'set(h_line2,''linestyle'',''s'')');
uimenu(h,'label','marker','callback',…
'set(h_line2,''marker'',''s'')');
nullset(h_line2,'uicontextmenu',h)
set(gca,'xtick',[0:pi/2:2*pi])
set(gca,'xticklabel',{'0','pi/2','pi','3pi/2', '2pi'})
xlabel('time 0-2\pi','fontsize',10)
% 建立关闭图形用户界面按钮【close】hbutton=uicontrol('position',[80 10 70 35],'fontsize',8, … 'fontweight','bold','string','close','callback','close');
null (a) (b)
图7-22 带有上下文菜单的图形界面
(a) 将抛物线的线型设为“*”时的图形界面;(b) 将余弦曲线的线宽设为“1.5”时的图形界面null二、用户界面控件对象的建立
创建控件对象的格式为:
H=uicontrol ('PropertyName1',value1,
'PropertyName2',value2,…)
【例7-4】 建立一个包含控件的图形用户界面,点击控件
时执行该控件的相应功能,要求绘制membrane,peaks
和sphere函数图形,并有光照控制效果。null【例7-4】 建立一个包含控件的图形用户界面,点击控件时执
行该控件的相应功能,要求绘制membrane,peaks和sphere
函数图形,并有光照控制效果。
% 建立图形窗口和坐标轴,去除窗口本身的菜单条和工具条,
并命名为 mysecondGUI
h0=figure('menubar','none','toolbar','none', ... 'position', [198 56 408 468],'name','mysecondGUI');
h1=axes('parent',h0,'position',[0.15 0.45 0.7 0.5], ... 'visible','off');
% 建立静态文本框和动态文本框
htext1=uicontrol('parent',h0,'units','points','position',… [54 110 45 15],'string','input title','style','text');
hedit=uicontrol('parent',h0,'units','points','position',… [100 110 45 16],'callback','title(get(hedit,''string''))','style','edit');null% 创建三个按钮
hbutton1=uicontrol('parent',h0,'units','points','string','Sphere',...
'position',[20 65 50 18],'callback','mesh(sphere);axis tight');
hbutton2=uicontrol('parent',h0,'units','points','string','Membrane','position',[75 65 50 18],'callback', ... 'mesh(membrane);axis tight');
hbutton3=uicontrol(‘parent’,h0,‘units’,‘points’,‘string’,...
'Sinc','position',[135 65 50 18],'callback',...
['[x,y]=meshgrid(-5:0.5:5);',...
'r=sqrt(x.^2+y.^2)+eps;','z=sin(r)./r;','mesh(x,y,z)']);
% 创建静态文本框和滚动条,鼠标拖动滚动条控制图形的颜色变化
htext2=uicontrol('parent',h0,'units','points','position',…
[20 30 45 15],'string','brightness','style', ... 'text');hslider=uicontrol('parent',h0,'units','points','position',…
[65 30 120 15],'min',-1,'max',1,'style','slider','callback',...
'brighten(get(hslider,''value''))');
% 建立静态文本框和五个单选按钮
nullhtext3=uicontrol('parent',h0,'units','points','position',…
[200 130 80 15],'string','select color:','style','text');
hradio(1)=uicontrol('parent',h0,'units','points','position',…
[200 115 80 15],'string','default','style',…
'radiobutton','value',1,'callback',...
['set(hradio,''value'',0);','set(hradio(1),''value'',1);',...
'colormap(''default'')']);
hradio(2)=uicontrol('parent',h0,'units','points','position',…
[200 100 80 15],'string','spring','style',…
'radiobutton','value',1,'callback',...
['set(hradio,''value'',0);','set(hradio(2),''value'',1);',...
'colormap(spring)']);
hradio(3)=uicontrol('parent',h0,'units','points','position',…
[200 85 80 15],'string','summer','style',…
'radiobutton','value',1,'callback',...
['set(hradio,''value'',0);','set(hradio(3),''value'',1);',...
'colormap(summer)']);nullhradio(4)=uicontrol('parent',h0,'units','points','position',…
[200 70 80 15],'string','autumn','style',…
'radiobutton','value',1,'callback',...
['set(hradio,''value'',0);','set(hradio(4),''value'',1);',...
'colormap(autumn)']);hradio(5)=uicontrol('parent',h0,'units','points','position',…
[200 55 80 15],'string','winter','style',…
'radiobutton','value',1,'callback',...
['set(hradio,''value'',0);','set(hradio(5),''value'',1);',...
'colormap(winter)']);
% 建立关闭图形用户界面按钮【close】hbutton4=uicontrol('parent',h0,'units','points', … 'string','Close',...
'position',[200 30 50 18],'callback','close');
null保存以上程序,命名为mysecondGUI,运行此文件,在静态文本框中输入“sinc”,点击“Sinc”按钮,则产生如图7-23所示的图形界面。图7-23 生成Sinc图形的GUI界面