1、第七章 MATLAB的GUI 程序设计Chapter 8: Design of MATLAB of GUI programGUI(Graphical User Interfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。目前90%以上的应用程序和软件都是在GUI下运行的。MATLAB有两种GUI用户界面控件的创建方式,基于命令行的方式用程序来制作和基于GUI的方式制作。这里主要介绍基于GUI的方式。MATLAB 的GUI的基本图形对象分为控件对象和用户界面菜单对象(包括固定菜单和现场菜单),简称控件和菜单。一. 控件对象及
2、属性(Object and its attributes of controller)1. GUI控件对象类型(The mode of controller object)控件对象是事件响应的图形界面对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(Callback). 常用的基本控件:(1) 按钮(Push Buttons):执行某种预定的单功能或操作;(2) 开关按钮(Toggle Button):产生一个动作并指示一个二进制状态(开或关),当鼠标点击它时按钮将下陷,并执行callback(回调函数)中指定的内容,再次点击,按钮复原,并再次执行callback 中的内容
3、; (3) 单选框(Radio Button):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项;(4) 复选框(Check Boxes):单个的复选框用来在两种状态之间切换,多个复选框组成一个复选框组时,可使用户在一组状态中作组合式的选择,或称为多选项;(5) 文本编辑器(Editable Texts):用来使用键盘输入字符串的值,可以对编辑框中的内容进行编辑、删除和替换等操作; (6) 静态文本框(Static Texts):仅仅用于显示单行的说明文字;(7) 滚动条(Slider): 可输入指定范围的数量值;(8) 边框(
4、Frames):在图形窗口圈出一块区域;(9) 列表框(List Boxes):在其中定义一系列可供选择的字符串; (10)弹出式菜单(Popup Menus): 让用户从一列菜单项中选择 一项作为参数输入; (11)坐标轴(Axes): 用于显示图形和图象2. 控件对象的描述(Description of controller object) MATLAB中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如文本框等。 每种控件都有一些可以设置的参数,用于表现控件的外形、功能及效果,既属性。属性由两部分组成:属性名和属性值,它们
5、必须是成对出现的。控制对象的属性包括公共属性、基本控制属性、修饰控制属性、辅助属性和callback管理属性。3. 控件对象的属性(Attributes of controller object) 用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。 两大类控件对象属性:第一类是所有控件对象都具有的公共属性,第二类是控件对象作为图形对象所具有的属性。A, 控件对象的公共属性Children 取值为空矩阵,因为控件对象没有自己的子对象Parent取值为某个图形窗口对象的句柄,该句柄表明了控件对象所在的图形窗口Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控
6、制该控件对象Type 取值为uicontrol,表明图形对象的类型,用户不能改写这个属性UserDate取值为空矩阵,用于保存与该控件对象相关的重要数据和信息,用set 和get函数可以访问该属性Visible取值为no 或off,决定空间是否在图形窗口可见。B,控件对象的基本控制属性BackgroundColor取值为颜色的预定义字符或RGB数值Callback取值为字符串,可以是某个M文件名或一小段MATLAB语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序。Enable取值为on(缺省值),inactive和off,当取值为on时,无论何时激活控件对象matlab 都执行
7、Callback属性定义的子程序。Extend取值为四元素矢量0,0,width, height,记录控件对象标题字符的位置和尺寸,该属性只能读不能写。ForegroundColor取值为颜色的预定义字符或RGB数值Max,Min取值都为数值String取值为字符串矩阵或数组,定义控件对象标题或选项内容Style取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox,由相应的值定义控件的类型。Units计量单位,取值可以是pixels, normalized, inches, c
8、entimeters或pointsValue取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型C,控件对象的修饰控制属性FontAngle取值为normal, italic, oblique,定义字体的形态FontName取值为控件标题等字体的字库名,必须与系统支持的字库名一致。FontSize取值为数值,定义字号FontWeight取值为normal, light, demi或bold,定义字体的粗细。HorizontalAligment取值为left,center或right,定义对齐方式D, 控件对象的辅助属性ListboxTop取值为数量值,定义列表框中最上方的字符串在st
9、ring属性中的序号。SliderStop取值为两元素矢量minstep,maxstep,用于slider控件Selected取值为on 或offSlectionHighlight取值为on 或off,决定控件对象被选中时,是否显示被选中的对象。E, Callback管理属性BusyAction取值为cancel或queue,决定采取的控制中断执行控件对象的Callback的调用方式。ButtonDownFun取值为字符串,一般为某个M文件名或一小段MATLAB程序CreateFun 取值为字符串,一般为某个M文件名或一小段MATLAB程序DeletFun取值为字符串,一般为某个M文件名或一小
10、段MATLAB程序HandleVisibility取值为on, callback或offInterruptible取值为on 或off,决定控件对象的Callback是否可以被随后的callback调用中断。二GUI开发环境(GUI Development Environment, GUIDE)MATLAB提供了一套可视化的创建图形窗口的工具,使用这个用户界面开发环境可方便的创建GUI应用程序, 它可以根据用户设计的GUI布局,自动生成M文件的框架,用户可使用这一框架编制自己的应用程序。MATLAB可视化的创建图形用户接口(GUI)工具包括:*布局编辑器(Layout Edtor)-在图形窗口
11、中加入及安排对象。*几何排列工具(Alignment Tool)-调整各对象相互之间的几何关系和位置*属性编辑器(Property Inspector)-查询并设置属性值*对象浏览器(Object Browser)-用于获得当前MATLAB图形用户界面程序中所有的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器。*菜单编辑器(Menu Editor)-建立窗口菜单条的菜单和任何构成布局的弹出菜单 在MATLAB中, GUI的设计是以 M文件的编程形式实现的,GUI的布局代码存储在M文件和MAT文件中,而在MATLAB6中有了很大的改变,MATLAB
12、6将GUI的布局代码存储在 FIG文件中,同时还产生一个M文件用于存储调用函数,在M文件中不再包含GUI的布局代码,在开发应用程序时代码量大大减少。GUI工具的使用1、布局编辑器(Layout editor)的使用: 在命令窗口输入GUIDE命令或点击工具栏中的guide图标都可以打开空白的布局编辑器,在命令窗口输入GUIDE filename 可打开一个已存在的名为filename图形用户界面。布局编辑器可以启动用户界面的控制面板,上述工具都必须从布局编辑器中访问。使用用户界面开发环境的一般步骤为:(1)布局编辑器参数设置 选File菜单下的Preferences菜单项打开参数设置窗口,点击
13、树状目录中的GUIDE,既可以设置布局编辑器的参数。(2)将控件对象放置到布局区a. 用鼠标选择并放置控件到布局区内;b. 移动控件到适当的位置;c. 改变控件的大小;d. 选中多个对象的方法;(3)布局编辑器的弹出菜单在任一控件上按下鼠标右键,会弹出一个菜单,通过该菜单可以完成布局编辑器的大部分操作。 (4)激活图形窗口 选Tools菜单中的Activate Figure(Run)项或点击工具条上的ActivareFigure(Run)按钮, 在激活图形窗口的同时将存储M 文件和FIG文件,如所建立的布局还没有进行存储,用户界面开发环境将打开一个Save As对话框,按输入的文件的名字,存储
14、一对同名的M文件和带有.fig扩展名的FIG文件。 (5)运行GUI程序 在命令窗口直接键入文件名或用openfig, open或hgload命令运行GUI程序。2 几何位置排列工具(Alignment tool)的使用: 可以通过选择工具栏中的排列工具图标打开排列工具窗口,用于调节各控件对象的水平、垂直位置和相互之间相对关系。3 用属性编辑器设置控件属性(Set attributes of controller with Property Inspector) 在属性编辑器中提供了所有可设置的属性列表并显示出当前的属性,用户可根据需要设置控件属性。(1)打开属性编辑器(Opening Pro
15、perty Inspector):三种方法:1. 用工具栏上的图标打开;2. 从View菜单中选择Property Inspector菜单项;3. 在按鼠标右键弹出的Property Inspector菜单中选择菜单项。(2)使用属性编辑器(Using Property Inspector):属性编辑器中包含了控件的基本属性,都可以在编辑器中填写或更改属性值,一般情况下许多属性可采用默认值,只对与制作目的直接相关的属性进行编辑。4 菜单编辑器(Menu Editor): 用于制作GUI窗口的菜单,包括菜单的设计和编辑,菜单编辑器有八个快捷键,可以利用它们任意添加或删除菜单,可以设置菜单项的属性
16、,包括名称(Label)、标识(Tag)、选择是否显示分隔线(Separator above this item)、是否在菜单前加上选中标记(Item is checked)、设置调用函数(Callback)。 菜单编辑器的下方有两个可选择的页面,分别用于设计主菜单和鼠标右键菜单,鼠标右键菜单为主程序窗口和控件上的弹出菜单,可设计多个鼠标右键菜单,每个控件可以通过属性查询器中UIContextMenu选择一个鼠标右键菜单,UIContextMenu的缺省选项为(None)5 对象浏览器(Object Browsers):用于浏览当前程序所使用的部对象信息,可以在对象浏览器中选种一个或多个控件来
17、打开该控件的属性编辑器。三、GUI程序设计(GUI Program design)GUI设计包括图形界面的设计和功能设计两个方面。一般步骤:*分析界面所要实现的主要功能,明确设计任务*在稿纸上绘制界面草图,优化草图*按设计草图上机制作静态界面*编写界面动态功能的程序,例1: 制作一个可进行图形显示、绘图启动和做3D 旋转操作的GUI: 1、 布置控件:一个坐标系,一个显示标题的文本框,一个选 择三维旋转的复选框和一个启动绘图的按钮。2、 定义文本框的属性:String-简单设计示例,FontName-隶书,FontSize-223、 定义坐标系: Visibleoff, a. 定义按钮属性:
18、string:加名称,选择FontName,FontSize,ForeGroundColor和按钮颜色BackgroundColor. Callback:surf(peaks(60).4、 定义复选框: String3D旋转,Callbackrotate3d例2:设计一个简单信号分析仪的程序,要求根据输入的两个频率和时间间隔,计算函数x=sin(2f1t)+sin(2f2t) 的值,并对函数进行快速傅立叶变换,最后分别绘制时域和频域的曲线。1. 设计图形界面(GUI Design)设计步骤: (1) 在布局编辑器中布置控件,(2) 使用几何位置排列工具对控件的位置进行调整;(3) 设计控件的属
19、性;(4) 设置其他绘图属性。2. 设置控件的标识(Set the Tag of controller) 控件的标识(Tag)是对于各控件的识别,每个控件载创建时都会由开发环境自动产生一个标识,在程序设计中,为了编辑、记忆和维护的方便,一般为控件设置一个新的标识。本例设置第一个坐标轴的标识为:frequency_axes, 用于显示频域图形; 第二个坐标轴的标识为:time_axes, 用于显示时域图形。三个文本编辑框的标识为f1_input, f2_input, t_input,分别用于输入两个频率和自变量时间的间隔.3. 编写代码(Edit code)GUI图形界面的功能,还是要通过一定的
20、设计思路和计算方法,由特定的程序来实现。为了实现程序的功能,还需要在运行程序前编写一些代码,完成程序中变量的赋值、输入输出、计算及绘图等工作。本例的代码内容为:%(1) 设置对象的初始值;%分别设置三个文本编辑框的初始值为:f1_input=20f2_input=50t_input=0:0.001:0.5%(2) 编写代码:%1) 从GUI获得用户输入的数据,本例中输入的三个数据%分别为频率1、频率2和时间间隔。f1=str2double(get(handles.f1_input,String);f2=str2double(get(handles.f2_input,String);t=eval
21、(get(handles.t_input,String);%2) 计算数据,计算函数值,按指定点进行快速傅立叶变%换,并计算频域的幅值和频域分辨率。x=sin(2*pi*f1*t)+sin(2*pi*f2*t);y=fft(x,512);m=y.*conj(y)/512;f=1000*(0:256)/512;%3) 在第一个坐标轴中绘制频域曲线。axes(handles.frequency_axes)plot(f,m(1:257)set(handles.frequency_axes,XminorTick,on)grid on%4) 在第二个坐标轴中绘制时域曲线。axes(handles.tim
22、e_axes) %选择适当的坐标轴plot(t,x)set(handles.time_axes,XminorTick,on)grid on运行程序(Running program)例3 :制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、色彩图、光照模式和反射模式,三个滚动条用于确定光源的位置,一个按钮用于退出演示。制作要点:(1)建立一个静态文本,用于显示界面的标题:光照效果演示;(2)建立坐标轴对象,用于显示图形;(3)建立四个下拉菜单,分别用于选择绘图表面的形状、色图、光照模式和反射模式,每个下拉菜单的上方都有一个静态文本用于说明菜单的作用;(4)在一个fra
23、me上建立三个滑条用于确定光源的位置,并在frame上方加一说明;(5)建立一个按钮用于退出演示;(6)为各控件编写回调程序:各控件的回调函数需分别写入,在被编辑的控件上单击鼠标右键调出下拉菜单,通过View Callback选项,单击Callback选项,在打开的存储对话框内输入预定的名称建立GUI文件,点击存储后会直接打开自动生成的M文件框架,并且被编辑的控件需要输入回调函数的地方将处于高亮状态,在该处直接编写或将预先编好的程序拷贝在该处即完成了该控件回调函数的输入。本例各控件的callback函数的内容分别为:function varargout = pushbutton1_Callba
24、ck(h, eventdata, handles, varargin)delete(handles.figure1)% -function varargout = popupmenu1_Callback(h, eventdata, handles, varargin)val=get(h,value);switch valcase 1 surf(peaks);case 2 sphere(30);case 3 membranecase 4 x,y=meshgrid(-4:.1:4); r=sqrt(x.2+y.2)+eps; z=sinc(r); surf(x,y,z)case 5 x,y=mes
25、hgrid(-1.5:.3:1.5,-1:0.2:1); z=sqrt(4-x.2/9-y.2/4); surf(x,y,z);case 6 t=0:pi/12:3*pi; r=abs(exp(-t/4).*sin(t); x,y,z=cylinder(r,30); surf(x,y,z);endshading interplight(Position,-3 -2 1);axis off% -function varargout = radiobutton1_Callback(h, eventdata, handles, varargin)set(h,value,1)set(handles.r
26、adiobutton2,value,0)set(handles.radiobutton3,value,0)set(handles.radiobutton4,value,0)lighting flat% -function varargout = radiobutton2_Callback(h, eventdata, handles, varargin)set(h,value,1)set(handles.radiobutton1,value,0)set(handles.radiobutton3,value,0)set(handles.radiobutton4,value,0)lighting g
27、ouraud% -function varargout = radiobutton3_Callback(h, eventdata, handles, varargin)set(h,value,1)set(handles.radiobutton1,value,0)set(handles.radiobutton2,value,0)set(handles.radiobutton4,value,0)lighting phong% -function varargout = radiobutton4_Callback(h, eventdata, handles, varargin)set(h,value
28、,1)set(handles.radiobutton1,value,0)set(handles.radiobutton3,value,0)set(handles.radiobutton3,value,0)lighting none% -function varargout = popupmenu2_Callback(h, eventdata, handles, varargin)val=get(h,value);switch valcase 1 colormap(jet)case 2 colormap(hot)case 3 colormap(cool)case 4 colormap(coppe
29、r)case 5 colormap(pink)case 6 colormap(spring)case 7 colormap(summer)case 8 colormap(autumn)case 9 colormap(winter)end% -function varargout = popupmenu3_Callback(h, eventdata, handles, varargin)val=get(h,value);switch valcase 1 lighting flatcase 2 lighting gouraudcase 3 lighting phongcase 4 lighting
30、 noneend% -function varargout = popupmenu4_Callback(h, eventdata, handles, varargin)val=get(h,value);switch valcase 1 material shinycase 2 material dullcase 3 material metalcase 4 material defaultend% -function varargout = slider1_Callback(h, eventdata, handles, varargin)val=get(h,value);set(handles
31、.edit1,string,num2str(val);lx=val; ly=get(handles.slider2,value); ly=get(handles.slider3,value);light(Position,x y z);% -function varargout = edit1_Callback(h, eventdata, handles, varargin)str=get(h,string);set(handles.slider1,value,str2num(str);lx=str2num(str); ly=get(handles.slider2,value); ly=get
32、(handles.slider3,value);light(Position,x y z);% -function varargout = slider2_Callback(h, eventdata, handles, varargin)val=get(h,value);set(handles.edit2,string,num2str(val);lx=get(handles.slider1,value); lx=val; ly=get(handles.slider3,value);light(Position,x y z);% -function varargout = edit2_Callb
33、ack(h, eventdata, handles, varargin)str=get(h,string);set(handles.slider2,value,str2num(str);% -function varargout = slider3_Callback(h, eventdata, handles, varargin)val=get(h,value);set(handles.edit3,string,num2str(val);% -function varargout = edit3_Callback(h, eventdata, handles, varargin)str=get(
34、h,string);set(handles.slider3,value,str2num(str);*对话框设计:在图形用户界面程序设计中,对话框是重要的信息显示和获取输入数据的用户界面对象。1、公共对话框: 公共对话框是利用windows资源的对话框,包括文件打开、文件保存、颜色设置、字体设置、打印设置等。1) 文件打开对话框:用于打开文件uigetfileuigetfile(FilterSpec)uigetfile(FilterSpec,DialogTitle)uigetfile(FilterSpec,DialogTitle,x,y)fname,pname=uigetfile()2) 文件保
35、存对话框:用于保存文件uiputfileuiputfile(InitFile)uiputfile(InitFile,DialogTitle)uiputfile(InitFile,DialogTitle,x,y)fname,pname=uiputfile()3) 颜色设置对话框:用于图形对象颜色的交互设置c=uisetcolor(h_or_c,DialogTitle)4) 字体设置对话框:用于字体属性的交互式设置uisetfontuisetfont(h)uisetfont(S)uisetfont(h,DialogTitle)uisetfont(S,DialogTitle)S=uisetfont(
36、)5) 打印设置对话框:用于打印页面的交互式设置dlg=pagesetupdlg(fig)pagedlgpagedlg(fig)6) 打印预览对话框:用于对打印页面进行预览printpreviewprintpreview(f)printdlg7) 打印对话框:printdlg(fig)printdlg(-crossplatform,fig)printdlg(-setup,fig)2、MATLAB专用对话框1)错误信息对话框:用于提示错误信息errordlg 打开默认的错误信息对话框errordlg(errorstring) 打开显示errorstring信息的错误信息对话框errordlg(e
37、rrorstring,dlgname) 打开显示errorstring信息的错误信息对话框,对话框的标题由dlgname指定erordlg(errorstring,dlgname,on) 打开显示errorstring信息的错误信息对话框,对话框的标题由dlgname指定. 如果对话框已存在,on参数将对话框显示在最前端。h=errodlg() 返回对话框句柄例:errordlg(输入错误,请重新输入,错误信息)H=errordlg(输入错误,请重新输入,错误信息,on) 2) 帮助对话框:用于帮助提示信息 helpdlg 打开默认的帮助对话框helpdlg(helpstring) 打开显示e
38、rrorstring信息的帮助对话框,helpdlg(helpstring,dlgname) 打开显示errorstring信息的帮助对话框, 对话框的标题由dlgname指定h=helpdlg() 返回对话框句柄例:helpdlg(矩阵尺寸必须相等,在线帮助)3) 输入对话框:用于输入信息answer=inputdlg(prompt) 打开输入对话框,prompt为单元数组,用于定义输入数据窗口的个数和显示提示信息,answer为用于存储输入数据的单元数组。answer=inputdlg(prompt,title) 与上者相同,title确定对话框的标题。answer=inputdlg(pr
39、ompt,title,lineNo) 参数lineNo可以是标量、列矢量或m2阶矩阵,若为标量,表示每个输入窗口的行数均为lineNo;若为列矢量,则每个输入窗口的行数由列矢量lineNo的每个元素确定;若为矩阵,每个元素对应一个输入窗口,每行的第一列为输入窗口的行数,第二列为输入窗口的宽度。answer=inputdlg(prompt,title,lineNo,defAns) 参数defans为一个单元数组,存储每个输入数据的默认值,元素个数必须与prompt 所定义的输入窗口数相同,所有元素必须是字符串。answer=inputdlg(prompt,title,lineNo,defAns,
40、Sesize) 参数resize决定输入对话框的大小能否被调整,可选值为on或off.例:prompt=Input Name,Input Age;title=Input Name and Age;lines=2 1;def=John Smith,35;answer=inputdlg(prompt,title,lines,def);4) 列表选择对话框:用于在多个选项中选择需要的值selection,ok=listdlg(Liststring,S,) 输出参数selection为一个矢量,存储所选择的列表项的索引号,输入参数为可选项Liststring(单元数组), SelectionMode(
41、single或multiple, ListSize(wight,height), Name (对话框标题)等例: d = dir;str = d.name;s,v = listdlg(PromptString,Select a file:,. SelectionMode,single,ListString,str)5) 信息提示对话框:用于显示提示信息msgbox(message) 打开信息提示对话框,显示message信息。msgbox(message,title) title确定对话框标题。msgbox(message,title,icon) icon用于显示图标,可选图标包括:none(
42、无图标)/error/help/warn/custom(用户定义)msgbox(message,title,custom,icondata,iconcmap) 当使用用户定义图标时,icondata为定义图标的图像数据,iconcmap为图像的色彩图。msgbox(,creatmode) 选择模式creatmode,选项为:modal, non_modal, 和replace。h=msgbox() 返回对话框句柄例: An example which blocks execution until the user responds: uiwait(msgbox(Start?,Title,modal); An example using a custom Icon is: Data=1:64;Data=(Data*Data)/64; h=msgbox(Are you ready?,Title,custom,Data,hot(64) An example which reuses th
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922