1、1,第4章4.8 MATLAB图形用户界面设计,2,图形界面设计,图形界面设计(Graphical User Interface,GUI ) 是指由窗口、菜单、对话框等各种图形元素组成的 用户界面。 在MATLAB中,基本的图形界面对象包含3类: 用户界面控件对象(uicontrol) 下拉式菜单对象(uimenu) 快捷菜单对象(uicontextmenu),3,主要内容,菜单设计 对话框设计 可视化设计应用实例,4,图形用户界面设计窗口,1.GUI设计模板 打开:FileNew 模板:四种模板,5,2.GUI设计窗口,控件工具栏,工具栏,菜单栏,图形对象设计区,6,4.8.1 菜单设计,M
2、ATLAB的各个图形窗口有自己的菜单栏,包括File、Edit、Windows和Help等菜单项。为了建立用户自己的菜单系统,可以先将图形窗口的MenuBar属性事先设置为none,以取消图形窗口缺省的菜单,然后再建立用户自己的菜单。1. 建立用户菜单 2. 菜单对象常用属性 3. 快捷菜单,7,1 建立用户菜单,要建立用户菜单可用uimenu函数,因其调用方法不 同,该函数可以用于建立一级菜单项和子菜单项。,建立一级菜单项的函数调用格式为: 一级菜单项句柄=uimenu(图形窗口句柄,属性名1, 属性值1,属性名2,属性值2,),建立子菜单项的函数调用格式为: 子菜单项句柄=uimenu(一
3、级菜单项句柄,属性 名1,属性值1,属性名2,属性值2,),8,两种调用格式的区别,建立一级菜单项时,要给出图形窗口句柄。否则,在当前窗口中建立菜单项。如果没有活动窗口,则会自动打开一个图形窗口; 建立子菜单项时,必须指定一级菜单项对应的句柄值。,例:hm=uimenu(gcf,Label,File);,hm1=uimenu(hm,Label,Save),hm2=uimenu(hm,Label,Save As),9,例4.8.1 建立用户菜单项,h=figure(Name,图形界面窗口, NumberTitle, off,MenuBar,none) hm=uimenu(h,Label,文件);
4、 hm1=uimenu(hm,Label,保存) hm2=uimenu(hm,Label,另存为) hm3=uimenu(hm,Label,退出),10,(1) MenuBar属性MenuBar属性的取值可以是figure(缺省值)或none。用来控制图形窗口是否应该具有菜单条。如果它的属性值为none,则表示该图形窗口没有菜单条。这时用户可以根据后面将介绍的uimenu()函数来加入自己的菜单条,如果属性值为figure,则该窗口将保持图形窗口默认的菜单条,这时也可以采用uimenu()函数在原默认的图形窗口菜单后面添加新的菜单项。,2 菜单对象常用属性,11,(2) Name属性 Name
5、属性的取值可以是任何字符串,它的缺省值为空。这个字符串作为图形窗口的标题。一般情况下,其标题形式为:Figure No.1:字符串。,(3) NumberTitle属性 NumberTitle属性的取值是on(缺省值)或off。决定着在图形窗口的标题中是否以“Figure No.n:”为标题前缀,这里n是图形窗口的序号,即句柄值。,12,(4) Tag属性Tag属性的取值是字符串,它定义了该菜单对象的一个标识值。定义了Tag属性后,在任何程序中都可以通过这个标识值找出该菜单对象。 (5) Type属性Type属的取值总是uimenu,这个属性值标明图形对象的类型。对菜单对象,其类型就是uime
6、nu,用户不能改写这个属性。,13,(6) UserData属性UserData属性的取值是一个矩阵,缺省值为空矩阵,用户可以在这个属性中保存与该菜单对象相关的重要数据或信息,借此可以达到传递数据或信息的目的。可以用set和get函数访问该属性。,菜单对象具有Children,Parent,Tag, UserData, Visible 等公共属性,除公共属性外,还有一些常用的特殊 属性,见下表所示:,14,15,例4.8.1(续) 建立用户菜单项 h=figure(Name,图形界面窗口, NumberTitle, off,MenuBar,none) hm=uimenu(h,Label,文件)
7、; hm1=uimenu(hm,Label,保存) hm2=uimenu(hm,Label,另存为) %hm3=uimenu(hm,Label,退出,callback,close) hm3=uimenu(hm,Label,&Quit,Accelerator,Q,callback,close,Separator,on),16,例4.8.2 建立图形演示系统菜单。 菜单条中含有3个菜单项:Plot、Option和Quit。 Plot中有Sine Wave和Cosine Wave两个子菜单 项,分别控制在本图形窗口画出正弦和余弦曲线。 Option菜单项的内容如图所示,其中Grid on和Grid
8、off控制给坐标轴加网格线,Box on和Box off控制给坐 标轴加边框,而且这4项只有在画有曲线时才是可选 的。Window Color控制图形窗口背景颜色。Quit控制 是否退出系统。,17,分析其步骤: Step1:按要求建立图形窗口; Step2:按要求建立第一个菜单项; Step3:按要求建立其子菜单项; Step4:按要求实现对应菜单项和子菜单项功能; Step5:对第二个菜单项,重复step2-step4; Step6: 结束,18,screen=get(0,ScreenSize); w=screen(3); h=screen(4); h=figure(Position,0.
9、3*h,0.3*h,0.5*w,0.5*h, Name,图形演示系统,NumberTitle, off, MenuBar,none);,5. hplot=uimenu(h,Label,19,8. hOption=uimenu(h,Label,20,13.hWincolor=uimenu(hOption,Label,18.hquit=uimenu(h,Label,21,%mysin t=-pi:pi/10:pi; plot(t,sin(t) grid on %mycos t=-pi:pi/10:pi; plot(t,cos(t) grid on,22,3 快捷菜单,快捷菜单是用鼠标右键单击某对象
10、时在屏幕上弹出的菜 单。这种菜单出现的位置是不固定的,而且总是和某个 图形对象相联系。在MATLAB中,可以使用 Uicontextmenu函数和图形对象的UicontextMenu属性来 建立快捷菜单,具体步骤为: (1) 利用uicontextmenu函数建立快捷菜单。 (2) 利用uimenu函数为快捷菜单建立菜单项。 (3) 利用set函数将该快捷菜单和某图形对象联系起来。,23,例4.8.3 绘制曲线y=2sin(5x)sinx,并建立一个与之相联系的快捷菜单,用以控制曲线的线型、曲线宽度和颜色。,24,x=0:pi/100:2*pi; y=2*sin(5*x).*sin(x); h
11、=plot(x,y);,hc=uicontextmenu; hls=uimenu(hc,Label,线型); hlw=uimenu(hc,Label,线宽); hlc=uimenu(hc,Label,线色);,uimenu(hls,Label,虚线,call,set(h,LineStyle,:);); uimenu(hls,Label,实线,call,set(h,LineStyle,-);); uimenu(hlw,Label,加宽,call,set(h,LineWidth,2);); uimenu(hlw,Label,变细,call,set(h,LineWidth,0.5);); uimen
12、u(hlc,Label,红色,call,set(h,Color,r);); uimenu(hlc,Label, 绿色,call,set(h,Color,g);); uimenu(hlc,Label,黄色,call,set(h,Color,y););,set(h,UicontextMenu,hc);,建立快捷菜单,建立菜单项,建立子菜单项并实现功能,将快捷菜单和曲线关联,25,26,4.8.2 对话框设计,对话框是人机交互信息的临时窗口,有广 泛的用途。目的是使得用户操作更加方便灵 活。,1. 对话框控件2. 对话框设计3. 常用对话框的设计4. 对话框设计例题,27,1. 对话框的控件,设计对
13、话框时,有很多控件,能实现各种各样 的功能。常用的控件有(P162),28,29,2 对话框的设计,在MATLAB中,要设计一个对话框,首先要建立一 个图形窗口,然后在图形窗口中放置所涉及到的用户 控件对象。,(1)建立控件对象命令uicontrol h_control=uicontrol(h_Parent,PropertyName,ProperValue,),(2)控件对象的属性对话框控件对象除了Children、Parent、Visible、 UserData等公共属性外,还有一些常用的特殊属性。,30,在可视化界面环境中创建控件,31,1磅=1/72英寸 1磅=1/28厘米,32,说明:
14、对于不同的控件对象(radio,check,slider,list popup),其Max、Min以及Value值的含义不同。,33,3. 常用对话框的设计,(1) 创建对话框dialog h=dialog(PropertyName,ProperValue,) 返回一个对话框句柄。该函数产生一个图形对象并 为对话框设置推荐的图形属性。 Note:该函数的属性是图形Figure的属性,Example: h=dialog(Name,图形对话框, Position, 240,240,200,50, Color,r),34,(2)创建错误对话框errordlg errordlg errordlg(ee
15、rrorstring) errordlg(eerrorstring,dlgname) errordlg(eerrorstring,dlgname,on) h=errordlg(),相应描述: a) 显示一个包含字符串”This is the default error string”的名为”Error Dialog”的对话框,b) 显示一个包含字符串”error string”的名为”Error Dialog”的对话框;,c) 显示一个包含字符串”error string”的名为”dlgname”的对话框,d) 指定是否取代一个已经存在的有相同名字的对话框。on表示把一个有相同名字的出错对话框
16、提在前台;,e) 返回一个错误对话框句柄。,35,Note: MATLAB自动改变对话框的大小来适应字符 串 errorstring 的长度.,例 errordlg errordlg(File not found) errordlg(File not found,File Error) errordlg(File not found,File Error,on),36,(3)显示帮助对话框helpdlg helpdlg helpdlg(helpstring) helpdlg(helpstring,dlgname) h=helpdlg() Note:MATLAB将helpstring中的内容自动
17、换行来适应 一个对话框的长度。,例: helpdlg helpdlg(you can select 10 points from figure) helpdlg(you can select 10 points from figure, points selection),37,(4)创建输入对话框inputdlg answer = inputdlg(prompt) answer = inputdlg(prompt,title) answer = inputdlg(prompt,title,lineNo) answer = inputdlg(prompt,title,lineNo,defAns
18、) answer = inputdlg(prompt,title,lineNo,defAns,Resize),对应描述:prompt是一个包含提示字符串的数组。 创建一个模式对话框并返回用户在数组中输入的内容 title为对话框指定一个标题 lineNo为用户的每个输入值指定输入的行数,可以是标量、列向量或矩阵。列向量为一个提示符指定输入的行数;矩阵是m*2矩阵,其中m是对话框中提示符的个数,矩阵的第一列为指定输入的行数;第二列指定字符的域宽。 defAns指定每个提示符的默认值 Resize说明对话框是否改变尺寸,取值on和off。,38,例4.8.6 inputdlg(AAAAAAA) i
19、nputdlg(AAAAAAA,input dialog) inputdlg(AAAAAAA,input dialog,2) inputdlg(AAAAAAA,input dialog,1,OOOOOOOO) inputdlg(AAAAAAA,input dialog,1,OOOOOOOO,on),Cell array,例4.8.7 创建输入一个整数和色图名称的对话框,每行只允许输入一行。,prompt = Enter Matrix size,Enter colomap name; title = Input data for peaks function ; lines = 1; def =
20、20,hsv; answer = inputdlg(prompt,title,lines,def),39,(5)创建选择列表内容的对话框listdlg Selection,ok=listdlg(ListString,S,),其中, Selection是已经选择的字符串的索引向量; 在只有一个选项的模式下,它的长度为1; 当ok=0时, Selection= ; 当点击OK按钮时,ok=1; 当点击Cancel按钮时,ok=0; 对话框还有一个Select all按钮。,输入参数和其值的形式列表如下:,40,41,例: 创建用户从当前目录中选择一个文件的对话框。 函数将返回一个向量,该向量的第一
21、个元素是被选文 件的索引,第二个元素在没有做选择时为0,做了选 择后为1。,d = dir; str = d.name s,v=listdlg(PromptString,Select a file:, SelectionMode,single,ListString,str),42,例: 创建一个自己的列表对话框,str=AAAAAA,BBBBBBB,CCCCCCC,DDDDDDD; s,v=listdlg(ListString,str,SelectionMode,multiple,ListSize,200,100,Name,MyListDialog,PromptString,Please se
22、lect follow options,ffs,18),MATLAB,43,(6)创建消息对话框 msgbox msgbox(message) msgbox(message,title) msgbox(message,title,icon) msgbox(message,title,custom,iconData,iconCmap) msgbox(,createMode) h=msgbox() 对应描述: 产生一个消息对话框 title为消息对话框指定标题 Icon指定在消息对话框中显示哪一个图标.icon可以是none、error、help、warn、custom 定义一个用户定制的图标。i
23、conData包含着定义图标的图形数据;iconCmap是图形所用的色图 指定消息框是否为模式化的,如果是非模式化的,是否要取代其它有同样标题的消息框。 createMode取modal、 non-modal和replace 返回一个对话框的句柄h,它是一个图形对象的句柄。,44,Note:消息对话中的消息自动换行来适应具有适当尺寸 的图框。Message是一个字符串向量、字符串矩阵或 数组。,例 mess=Inputdlg help,Listdlg help;Msgbox help, Pagedlg help msgbox(mess,MyDialogHelp,help),mess = Inp
24、utdlg help Listdlg helpMsgbox help Pagedlg help,45,(7)创建显示页面的版面对话框pagedlg pagesetupdlg pagesetupdlg(fig) 对应描述 对当前图形显示一个页面的版面对话框,使用户可以进行页面设置 对由fig指定的图形显示一个页面设置对话框,例4.8.11 figure x=0:pi/100:2*pi; y=sin(x); plot(x,y) pagesetupdlg,46,47,(8)创建显示打印对话框printdlg printdlg printdlg(fig) printdlg(-crossplatform
25、,fig) 对应描述 打印当前的图形 生成一个对话框,由此用户可以打印句柄fig指定的图形窗口。但该命令不能打印用户菜单 对微软的Windows操作系统显示一种标准的交叉平台式的MATLAB打印对话框。,48,例 t=0:pi/100:2*pi; y=sin(x); plot(x,y) printdlg,49,(9)创建问题对话框questdlg button=questdlg(qstring) 打开问题提示对话框,有三个按钮,分别为:yes,no和cancel,questdlg确定提示信息。 button=questdlg(qstring,title) title确定对话框标题。 butto
26、n=questdlg(qstringtitle,default) 当按回车键时,返回default值,default 必须是yes,no或cancel 之一。 button=questdlg(qstring,title,str1,str2,default) 打开问题提示对话框,有两个按钮,分别由str1和str2确定,qstdlg确定提示信息,default必须是str1或str2之一。 button=questdlg(qstring, title,str1,str2,str3,default) 打开问题提示对话框,有三个按钮,分别由str1, str2和str3确定,qstdlg确定提示信息
27、,default必须是str1, str2或str3之一。,50,例 生成一个问询对话框,询问用户是否继续一个假定的操作。,button=questdlg(Do you want to continue?,Continue Operation,Yes,No,Help,No) if strcmp(button,Yes) disp(Creating file) elseif strcmp(button,No) disp(Canceled file operation) elseif strcmp(button,Help) disp(Sorry,no help) end,51,(10)创建警告对话框
28、warndlg h=warndlg(warningstring,dlgname) 打开警告信息对话框,显示warningstring信息, dlgname确定对话框标题,h为返回对话句柄。,例 warndlg(Pressing OK will clear Memory, Warning!),52,(11) 进程条 h=waitbar(x,title) 显示以title为标题的进程条,x为进程条的比例长度,其值必须在0到1之间,h为返回的进程条对象的句柄。 waitbar(x,title,creatcancelbtn,button_callback) 在进程条上使用creatcancelbtn参
29、数创建一个撤销按钮,在进程中按下撤销按钮将调用button_callback 函数。 waitbar(,property_name,property_value,) 选择其它由prompt_name定义的参数,参数值由prompt_value指定。,53,例 clc h=waitbar(0,please wait.); pause; %暂停,击任一键继续 for i=1:1000waitbar(i/1000,h,MyProcess.) end close(h),54,(12) 打开文件对话框uigetfile uigetfile 显示一个用于检索一个文件的对话框,列出了当前目前中的文件和目录。
30、 uigetfile(FilterSpec)FilterSpec确定最先显示的文章,它可以用通配符*。 uigetfile(FilterSpec,DialogTitle) uigetfile(FilterSpec,DialogTitle,x,y)把对话框定位在x,y,这里x和y是距左边界和上边界的距离,以像素为单位。 fname,pname=uigetfile()返回在对话框中选择的文件的名称和路径。fname 保存被选中的文件的名称,pname保存路径。,55,例 列出选定目录中的所有.m文件 fname,pname=uigetfile(C:Documents and Settings yf
31、zxMy Documents MATLAB*.m, Sample Dialog Box),56,(13)保存文件对话框uiputfile uiputfile 显示一个中写入文件名的对话框,列出了当前目前中的文件和目录。 uiputfile(InitFile)显示的对话框包含当前路径中由InitFile确定的文件的列表。InitFile可以是一个文件的全名,也可以包含通配符*。 uiputfile(InitFile,DialogTitle) uiputfile(InitFile,DialogTitle,x,y)把对话框定位在x,y,这里x和y是距左边界和上边界的距离,以像素为单位。 fname,
32、pname=uiputfile()返回在对话框中选择的文件的名称和路径。fname 保存被选中的文件的名称,pname保存路径。,57,例 显示一个标题为Save File name,文件名为aaa.m的对话框。 fname,pname=uiputfile(aaa.m, Save File name),58,4. 对话框设计例题,例(1) 建立按钮对象,单击时绘制正弦函数,同时建立双位按钮,控制是否给坐标加网格线。,Program code: uicontrol(gcf,Style,push,Position,40,5,100,25,String,Plot,call,x=0:pi/100:2*
33、pi;plot(x,sin(x) uicontrol(gcf,Style,toggle,Position,170,5,100,25, String,Grid,call,grid),59,60,例(2) 建立单选按钮,用来设置图形窗口的颜 色,只能选择一种颜色。,61,Program code: htxt=uicontrol(gcf,Style,text,Position,200,130,150,20,String,Color Options) hr=uicontrol(gcf,Style,radio,Position,200,100,150,25, String,red,Value,1,cal
34、l,set(hr,Value,1);,set(hb, Value,0);,set(hy,Value,0);,set(gcf,Color,r); hb=uicontrol(gcf,Style,radio,Position,200,75,150,25, String,blue,Value,1,call,set(hb,Value,1);,set(hr,Value,0);,set(hy,Value,0);,set(gcf,Color,b); hy=uicontrol(gcf,Style,radio,Position,200,50,150,25, String,yellow,Value,1,call,s
35、et(hb,Value,0);,set(hr,Value,0);,set(hy,Value,1);,set(gcf,Color,y); he=uicontrol(gcf,Style,push,String,Quit,call,close);,62,例(3) 建立复选框按钮,用来设置图形窗口的颜 色、标题、大小等。,63,htxt=uicontrol(gcf,style,text,Units,normalized,Position,.1 .5 .25 .1,String,Set Windows Properties);,hp=uicontrol(gcf,Style,check,Units,nor
36、malized,Position,.1 .4 .25 .1,String,MyPosition,.call,set(gcf,Position,300,300,300,250);,if get(hp,Value)=1,set(gcf,Position,300,200,600,500),end);,hc=uicontrol(gcf,Style,check,Units,normalized, Position,.1 .3 .25 .1,String,MyColor,.call,set(gcf,Color,g); if get(hc,Value)=1,set(gcf,Color,r),end);,64
37、,hn=uicontrol(gcf,Style,check,Units,normalized,Position,.1 .2 .25 .1,String,MyName,.call,set(gcf,Name,复选框未被选中);,if get(hn,Value)=1,set(gcf,Name,复选框被选中),end);,65,例(4) 建立下拉列表,列表中包含一组图形形状.当选择某种形状时,要求在图形窗口中画出.,ScreenColor=get(gcf,Color); htext=uicontrol(gcf,Style,text, String,Please select one of shapes
38、,. Position,80,360,200,20, Fontsize,12,ForegroundColor,b, BackgroundColor, ScreenColor(1),ScreenColor(2),ScreenColor(3);,hlist=uicontrol(gcf,Style,list, String,line|triangle|square|rectangle|diamond, call,Mydraw,Position,100,200,100,150,Fontsize,12, BackgroundColor,w);,66,67,例8.2.4.5 建立两个滚动条,分别用于设置图
39、形窗口 的宽度和高度,并利用静态文本说明对象,标出滚动 条的数据范围以及当前值,68,screen=get(0,ScreenSize); w=screen(3); h=screen(4); hfigure=figure(Position,0.35*h,0.3*h,0.4*w,0.25*h,Name, 滑动条演示窗口,NumberTitle,off, MenuBar,none);,图形窗口,hslider1=uicontrol(hfigure,Style,Slider,Position, 50,50,120,20, Min,200,Max,800, Value,400, callback,set
40、(azmcur,String,num2str(get(hslider1,Value);, set(hfigure,Position,0.35*h,0.3*h,get(hslider1, Value),get(hslider2,Value););,第一个滑动条,69,hslider2=uicontrol(hfigure,Style,Slider,Position, 240,50,120,20, Min,100,Max,600,Value,300, callback,set(elvcur,String,num2str(get(hslider2,Value);,. set(hfigure,Posit
41、ion,0.35*h,0.3*h,get(hslider1, Value),get(hslider2,Value););,第二个滑动条,azmmin=uicontrol(hfigure,Style,text,Position, 20,46,30,20,String,num2str(get(hslider1,Min); elvmmin=uicontrol(hfigure,Style,text,Position,210,46,30,20,String,num2str(get(hslider2,Min);,用静态文本标出最小值,70,azmmax=uicontrol(hfigure,Style,te
42、xt,Position,170,46,30,20,String,num2str(get(hslider1,max); elvmmax=uicontrol(hfigure,Style,text,Position,360,46,30,20,String,num2str(get(hslider2,max);,用静态文本标出最大值,azmLabel=uicontrol(hfigure,Style,text,Position, 50,80,65,20,String,Width); elvLabel=uicontrol(hfigure,Style,text,Position,240,80,65,20,St
43、ring,Height); azmcur=uicontrol(hfigure,Style,text,Position, 120,80,65,20,String,num2str(get(hslider1,Value); elvcur=uicontrol(hfigure,Style,text,Position,240,80,65,20,String,num2str(get(hslider2,Value);,用静态文本标出当前设置的宽度和高度,71,例8.2.4.6 建立如图所示的”数制转换”对话 框,单击左边输入一个十进制整数和216之间的数, 单击“转换”按钮能在右边得到十进制提对就的二十 六进
44、制的字符串,单击“退出”按钮退出对话框。,72,hfigure=figure(Name,数制转换对话框,Color,0.8 0.8 0.8, Position,100 200 400 200, NumberTitle,off,Menubar,none);,hinput1=uicontrol(hfigure,Style,text,String,输入框,Fontsize,12,units,normalized,Position,.05 .8 .45 .1,Horizontal,Center, Back,.8 .8 .8);,houtput=uicontrol(hfigure,Style,text,
45、String,输出框,Fontsize,12,units,normalized,Position,.5 .8 .45 .1,Horizontal,Center,Back,.8 .8 .8);,73,hframeInput=uicontrol(hfigure,Style,frame,units,normalized, Position,.05 .33 .45 .45, Horizontal, Center,Back,w); hframeOutput=uicontrol(hfigure,Style,frame,units,normalized,Position,.52 .33 .45 .45, Horizontal,Center,Back,w);,hinput2=uicontrol(hfigure,Style,text,String,十进制,Fontsize,10,units,normalized,Position, .052 .6 .18 .1,Horizontal,Center,Back,w); hinput3=uicontrol(hfigure,Style,text,String,216进制,Fontsize,10,units,normalized,Position, .052 .4 .18 .1,Horizontal,Center, Back,w);,