第5章 图形用户界面(GUI)编程_第1页
第5章 图形用户界面(GUI)编程_第2页
第5章 图形用户界面(GUI)编程_第3页
第5章 图形用户界面(GUI)编程_第4页
第5章 图形用户界面(GUI)编程_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020/6/1,合肥工业大学机械与汽车工程学院,图形用户界面编程,山东省计算中心刘焕进E-mail:liuhuanjinliu,2020/6/1,主要内容图形对象图形用户界面的设计原则和步骤图形用户界面的开发方法直接编写M文件开发图形用户界面利用GUIDE工具开发图形用户界面典型案例介绍,2020/6/1,第一节图形对象,2020/6/1,1、图形对象:MATLAB用来显示数据和创建图形用户界面的基本元素。例如:程序界面上的按钮、菜单、工具条等。2、图形对象的标识:使用“句柄”来标识每一个图形对象的实例。通过句柄,用户就可以找到相应图形对象的各项属性,进而修改这些属性,以产生不同的图形呈现效果。,一、图形对象的概念,2020/6/1,如右图所示的图形用户界面包括如下图形对象:(1)一个坐标轴,用来在其中绘图;(2)一个弹出式菜单,列出MATLAB中的三个函数:peaks、membrane和sinc;(3)一个静态文本框,提示用户选择弹出式菜单项;(4)三个下压按钮,用来调用相应的绘图命令来绘制图形。,2020/6/1,二、图形对象的类型,1.图形对象的层次关系,根据图形对象之间的依赖关系,MATLAB将所有图形对象组织在一个树形结构的层次关系表中,如下图所示。处在树形结构上层的对象是下层对象的父对象;处在树形结构下层的对象是上层对象的子对象。例如:axes对象是figure对象的子对象,或者说figure对象是axes对象的父对象。,2020/6/1,2、MATLAB图形对象种类,2020/6/1,在进行图形用户界面编程时,用户最关心的是电脑屏幕的尺寸,用户需要根据电脑屏幕的尺寸(通常用像素点来表示)来确定图形窗口的尺寸大小。【例】在命令窗口中输入命令以查询计算机屏幕的尺寸,【注】计算机屏幕是一个根对象(root)。在MATLAB中,可以使用set和get命令来设置它的属性。通常,root对象的所有属性都采用默认值,用户不必进行修改。root对象的句柄值为0。,get(0,Units)%取得表示屏幕尺寸的单位,默认为像素(pixels)ans=pixelsget(0,ScreenSize)%取得屏幕的尺寸,为1280800像素点ans=111280800,2020/6/1,三、图形对象的属性,图形对象的属性可以控制对象的外观和行为等许多方面的性质。,对象的属性既包括对象的一般信息,例如对象的类型、父对象和子对象等;又包括对象的特定的、独一无二的信息,例如figure对象中对鼠标控制的WindowButtonDownFcn、WindowButtonMotionFcn等属性。,MATLAB将图形对象的信息组织成一个层次表,并将这些信息储存在该对象的属性中。例如,root属性表包括当前图形窗口的句柄和当前的指针位置;figure属性表包括其子对象的列表并始终跟踪窗口中发生的特定事件,等等。,2020/6/1,一些属性对于所有的图形对象来说具有相同的含义。下表列出了图形对象的这些共有的属性。,2020/6/1,续前表:,2020/6/1,MATLAB为所有对象都设置了缺省值。用户在创建图形对象时,如果没有指定其属性值,则MATLAB会使用对象的系统缺省属性值来创建对象。可以在命令窗口中使用get命令来查询这些缺省的属性值,所有缺省属性值均以factory开头,表示其“出厂”设置。,【例】查询出厂设置,get(0,factory)ans=factoryFigureAlphamap:1x64doublefactoryFigureBusyAction:queuefactoryFigureButtonDownFcn:factoryFigureClipping:onfactoryFigureCloseRequestFcn:closereqfactoryFigureColor:000factoryFigureColormap:64x3double.,2020/6/1,用户不仅可以查询当前任意图形对象的属性值,而且可以设置对象的大多数属性值(某些属性被设置为“只读”,用户只能查询,不能修改)。,属性值只对对象的特定实例起作用,即修改对象的属性值不会对同类对象、不同实例的属性值产生影响。例如,修改坐标轴1的刻度值,坐标轴2的刻度值则不会受影响,等等。,由于是层次结构,所以某个对象的属性改变时,会影响到这个结构中它以下的对象。例如,如果使用鼠标改变图形窗口在电脑屏幕上的位置,线条和坐标轴对象的位置也随之改变。,有两种方法可以用来修改对象的属性值:一种是在创建对象的时候设置;另一种是在创建完成后,通过获得对象的句柄,调用set函数来修改对象的属性值。,2020/6/1,【例】查询图形对象的属性值可以通过如下命令查询当前图形对象的缺省属性值。,h=gcf;%取得当前图形窗口的句柄get(h)%取得当前图形窗口的缺省属性值结果如下所示:Alphamap=(1by64)doublearrayBackingStore=onCloseRequestFcn=closereq%关闭窗口时调用的回调函数Color=%窗口的背景颜色Colormap=(64by3)doublearrayCurrentAxes=%当前坐标轴,为(空)表示还未创建坐标轴CurrentCharacter=CurrentObject=CurrentPoint=00%鼠标当前的位置,2020/6/1,【例】修改窗口的颜色为蓝色,去掉figure1标识,并将窗口的名称设置为“myfirstfigure”。,h=gcf;%取得当前图形窗口的句柄set(h,color,001);%修改其背景颜色为蓝色set(h,numbertitle,off);%去掉figure的数字编号set(h,name,myfirstfigure);%设置figure的名称,2020/6/1,四、图形对象的操作,每一种类型的图形对象都有一个相应的创建函数,这个创建函数使用户能够创建这一类对象的一个实例。除了在“绘图与可视化”这一章中提到的二维绘图函数(如plot)、三维绘图函数(如plot3)和特殊绘图函数(如stem)等函数外,图形窗口对象、坐标轴、用户控件、用户菜单、工具条和现场菜单创建函数以及对句柄的操作函数列于下表中。,1、图形对象操作函数,2020/6/1,2020/6/1,2020/6/1,gco、gcbo、gcf和gca是get函数的助记符,其含义如下:(1)gco回当前图形窗口对象的CurrentObject属性值,相当于get(gcf,CurrentObject);(2)gcbo返回根对象的CallbackObject属性值,相当于get(0,CallbackObject);(3)gcf返回根对象的CurrentFigure属性值,相当于get(0,CurrentFigure);(4)gca返回当前图形窗口对象的CurrentAxes属性值,相当于get(gcf,CurrentAxes),2、常用助记符,3、常用操作函数:set和get,在MATLAB中,有两个基本命令用来处理图形对象:get和set。通过使用这两个命令,可以设置和修改指定对象的属性值。,2020/6/1,【例】利用set和get来设置和查询图形对象的属性,set(fh,Pointer)%Pointer属性标识鼠标指针的形状,arrow表示默认的指针形状crosshair|fullcrosshair|arrow|ibeam|watch|topl|topr|botl|botr|left|top|right|bottom|circle|cross|fleur|custom|hand,(1)查看图形窗口对象的大小和位置的度量单位,%使用缺省的属性创建一个图形窗口对象fh=figure;get(fh,units)%查看度量单位ans=pixels,(2)改变窗口的大小和位置,%将窗口的左下角移动到点(200,300)处,大小设置为400300像素点set(fh,Position,200300400300);可以看到,图形窗口在屏幕上的位置和大小均发生了改变。,(3)查看可以设置的鼠标指针的形状,2020/6/1,【例】图形对象操作简单示例程序,程序运行界面如下图所示:,2020/6/1,示例程序中的几点注意事项:,1.关于函数M文件,代码的起始部分有如下语句“function=ex5_4()”,此语句表明将该文件声明为函数M文件,function是声明函数M文件时必须使用的关键字,ex5_4为函数的名称,()和内分别包含函数的输入和输出参数,为空表示函数不带输入和输出参数。,如果函数需要输入和输出参数,可以这样声明:functionout1,out2,.=ex5_4(in1,in2,.)函数的输入和输出参数的个数不受限制。,2020/6/1,2.关于结构变量S,程序中的变量S定义为结构体,又称为“句柄结构”,该结构体包含了界面上所有图形对象的句柄,这样做的目的有两个:一是为了代码的简洁,二是便于各图形对象的句柄在各回调函数之间的传递。这是编程时的习惯做法。,S.fh、S.text、S.pop和S.axes是结构体S的字段,分别保存图形窗口对象的句柄、文本对象的句柄、弹出式菜单对象的句柄和坐标轴对象的句柄。,2020/6/1,3.弹出式菜单的Callback属性,在MATLAB中,将图形对象的Callback属性设置为函数句柄的形式,可以将主函数和回调函数的代码保存到同一个函数M文件中。每一个函数M文件都只有一个主函数,这个主函数位于文件的开头,其余函数都是子函数。,在示例程序中,设置弹出式菜单的回调函数为mycallback,并把句柄结构S作为参数传递给它,以方便在子函数中通过句柄结构对界面上的图形对象进行控制。例如,可以使用set命令来改变线条对象的颜色属性,等等。,2020/6/1,4.图形对象的Position属性,figure、axes、text和popupmenu等图形对象都有Position属性,用来确定图形对象的位置和大小。Position定义了一个矩形区域,来确定图形对象的位置和大小:rect=left,bottom,width,height,left和bottom表示图形对象矩形区域的左下角在其父对象中的坐标,figure的父对象是电脑屏幕(root对象),axes、text和popupmenu的父对象是figure。width和height确定了矩形区域的宽度和高度。,2020/6/1,下图标识了figure窗口在屏幕上的位置,其左下角相对于屏幕的左下角的位置矢量如图中的红色“”型虚线所示;界面上的Edit控件相对于figure窗口的位置矢量如图中的黑色“*”型虚线所示;文本框和坐标轴的位置也在图中做了标注。,2020/6/1,5.曲线的Color属性,在MATLAB的帮助文件中,Line对象的Color属性值为ColorSpec。ColorSpec指的是在MATLAB中定义颜色的三种方式:RGB三元素行向量;简称;全称。,RGB向量中个元素的取值在01之间,分别表示red(红色)、green(绿色)和blue(蓝色)所占的比重。MATLAB中有8中预定义的颜色,列于下表中。,2020/6/1,2020/6/1,6.使用propedit属性编辑器编辑图形对象的属性,除了使用set和get命令来设置和查询图形对象的属性外,MATLAB还提供了一个图形用户界面的属性编辑器,利用它可方便地对图形用户界面上对象的属性进行设置修改。,在命令窗口中输入下列命令,即可显示属性编辑器。propedit,2020/6/1,下图是属性编辑器的界面。FigureName是显示在窗口标题栏中的名称;ShowFigureNumber如果被勾选,则在窗口的名称前显示窗口的编号,图中的Figure2:ex5_4;Colormap表示图形窗口使用的色图矩阵,有13种预定义的色图矩阵,此外,用户可以定义自己的色图矩阵;点击MoreProperties.按钮,可以打开Inspector窗口,用户可以查看和修改更多的属性值;ExportSetup按钮可以导出设置好的figure窗口并可以保存为.fig、.bmp、.jpg等图片文件。,2020/6/1,第二节图形用户界面的设计原则和步骤,2020/6/1,1简单性,一、图形用户界面设计原则,设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征。只在界面上显示最终的、最关键的、最重要的信息,以保持界面的整洁。要正确地使用图形的表达能力。设计界面时要合理地采用图形表示,滥用图形表示有时会造成画面混乱,反而不便于用户使用。设计界面应尽量减少窗口数目,力求避免在不同窗口之间进行来回切换。,2020/6/1,2一致性,人机界面的一致性主要体现在输入、输出方面的一致性。具体是指在应用程序的不同部分,甚至不同的应用程序之间,具有相似的界面外观和不具,相似的人机交互方式以及相似的信息显示格式等。例如:凡是下拉菜单或者弹出式菜单都有同样的结构和操作方法;各种类型信息(包括结果信息、提示信息、错误信息、帮助信息等)都在确定的屏幕位置和以相似的格式显示等。一致性原则有助于用户学习,减少用户的学习量和记忆量,有助于用户将局部的经验知识推广到其它的场合下应用。,2020/6/1,3熟悉性,设计新的图形界面时,应尽量使用人们所熟悉的标志和符号。用户可能并不了解新界面的具体含义及操作方法,但完全可以根据自己所熟悉的标志来摸索界面的使用。,4系统要给用户提供反馈信息,要通过图形界面及时对用户的操作作出反应,给出反馈信息,以便于用户确定其操作是否正确,操作的结果是什么。如果执行某个命令或功能需要耗费较长的时间,需要给出操作完成剩余的时间等信息,便于用户及时掌握程序运行的进度。同时,系统可以允许用户中断正在进行的运算。,2020/6/1,5用户界面应具有容错能力,在用户输入、调试运行程序时难免会出错,此外,计算机的软件或硬件系统也可能出错。因此,用户界面应具有容错能力,应能及时给出出错信息,出错信息应清楚、易理解。同时,用户界面应具有保护功能,防止因用户的误操作而破坏系统的运行状态和信息存储。此外,图形用户界面应提供帮助功能,便于用户学习和使用系统,等等。,2020/6/1,1确定对界面的要求和使用环境,二、图形用户界面设计步骤,一个图形用户界面的优劣,很大程度上取决于用户的使用评价。因此,在系统开发的最初阶段,尤其要重视系统界面部分的用户需求,了解用户的技能和经验,综合考虑系统直接的或潜在的用户需求,同时要考虑图形用户界面运行所必需的软、硬件环境。,2020/6/1,2分析界面功能,明确设计任务,在设计界面之前,需要仔细考虑界面的外观和要完成的功能。可以围绕“信息输入-信息处理-信息输出”这样一条主线,理清哪些信息或参数是需要通过图形界面输入,以何种方式输入;在程序运行过程中会产生哪些中间信息,哪些中间信息是有必要呈现给用户的;程序运行结束后会产生哪些结果,这些结果以何种方式在界面上体现。,2020/6/1,3建立界面模型,根据系统的功能以及输入、输出信息,选择合适的控件,对界面进行合理的布局,构建图形用户界面草图,并反复推敲、修改,直至获得满意的效果。,4根据界面模型完成图形界面的开发,根据确定的界面模型,选择合适的界面开发方法,逐步细化完成界面的开发。,2020/6/1,第三节开发图形用户界面的方法,2020/6/1,两种开发图形用户界面程序的方法:一是以基本的MATLAB程序开发为主,直接编写M文件;二是以鼠标为主通过MATLAB提供的GUIDE集成开发环境进行。,2020/6/1,1简介,一、直接编写M文件的方法,该方法以句柄图形(HandleGraphics)的概念为基础,依据前面所讲的图形对象的相关知识,通过编写MATLAB代码,调用图形对象的操作函数来创建、操作图形对象,设置图形对象的有关属性,定义有关图形对象的相关回调函数,开发出满足要求的图形用户界面。,2特点,以编写纯代码的形式进行的,需要用户熟练掌握图形对象的相关知识,需要较多的编程技巧。,2020/6/1,过程比较明晰,代码编写较为灵活,代码执行效率高,整个程序只包含一个M文件。,用户需要事先对界面的格式及布局进行细致的规划,尤其是要准确计算各图形对象在界面上的位置,以便正确确定其Position属性的值。可能需要多次修改代码以修改对象的属性值,以便得到满意的图形界面效果,需要占用较多的开发时间。,2020/6/1,1简介,二、利用MATLAB提供的GUIDE界面开发工具,GUIDE(GraphicalUserInterfaceDevelopmentEnvironment)是MATLAB提供的一个专门用于GUI程序设计的快速开发环境。GUIDE是一个界面设计工具集,MATLAB将所有GUI支持的用户控件都集成在这个开发环境中,并提供界面外观、属性和事件响应方式的设置方法。用户不需要编写任何代码,即可以通过鼠标的简单拖拽就能迅速地产生各种GUI控件,并可以根据要求方便地修改它们的外形、大小、颜色等属性,从而帮助用户方便地设计出各种符合要求的图形用户界面。GUIDE界面如下图所示。,2020/6/1,MATLABR2008a的GUIDE界面,2020/6/1,2生成的文件类型,(1)FIG文件,该文件包括GUI图形窗口及其上所有控件的完整的描述,包括所有对象的属性值。FIG文件是一个二进制文件,在用户打开GUI时,MATLAB自动读取FIG文件来重新构造图形窗口及其所有控件。所有对象的属性都被设置为图形窗口创建时保存的属性。可以使用open、openfig和hgload命令来打来后缀为.fig的FIG文件。,2020/6/1,(2)M文件,该文件包括GUI设计、控制函数以及定义为子函数的用户控件回调函数,主要用于控制GUI打开时的各种特征。该M文件的内容包括两部分:GUI初始化和控件的回调函数。当用户与GUI进行交互操作时,程序将调用相应的回调函数来处理用户的操作。,2020/6/1,3特点,同直接编写M文件的方法相比,该方法有如下优点:开发图形界面直观、便捷、所见即所得,自动生成的M文件中包含程序所需要的一些有用的函数代码(如初始化函数OpeningFcn和输出函数OutputFcn等),无需用户自行编写。可以使用M文件生成的有效方法来管理图形对象句柄(即句柄结构handles),并执行回调函数子程序。可以自动插入回调函数的原型,用户只需要编写回调函数的具体实现代码即可。,2020/6/1,4开发步骤,利用GUIDE工具来实现一个图形用户界面包括以下两项工作:GUI界面设计和GUI控件编程。整个GUI的实现过程可以分为如下几步:根据需要设置GUIDE开发环境。通过菜单File-Preferences菜单项来完成。使用界面设计编辑器进行GUI界面设计。编写用户GUI控件的回调函数代码。,2020/6/1,第四节直接编写M文件开发图形用户界面,2020/6/1,一、M文件的类型,1、两种M文件脚本文件(MATLABscripts)和函数文件(MATLABfunctions)。2、两种M文件的区别脚本M文件不包含函数声明行,没有输入参数和输出参数;函数M文件是以函数声明行“function.”作为开始的,可以包括输入参数和输出参数。脚本M文件中的变量全部存在于基本工作空间(BaseWorkspace)中,用户可以在命令窗口中直接访问基本工作空间中的变量;在函数M文件中使用的变量的作用域是局部的,只局限于函数空间(FunctionWorkspace)内部,用户不能在命令窗口中直接访问函数空间中的变量;MATLAB编译器V4.3(MATLAB7.1)版本及其之前的版本只能编译(使用mcc命令)函数M文件,不能编译脚本M文件。,2020/6/1,3、将脚本M文件转换为函数M文件若将脚本M文件转换为函数M文件,只需在文件的起始处添加关键字function,并指定函数的名称(例如myfunc)即可。函数M文件运行后,在命令窗口中仍然显示变量t的数值,但在基本工作空间中就不会看到变量m和t了。,【例】将脚本M文件转换为函数M文件,(1)脚本M文件的代码:m=magic(4);%产生把4x4的魔方矩阵t=m.3;%将m中的每个元素求三次方disp(t);%在命令窗口中显示t的值,(2)转换后的M文件见ex54_1.m,其代码为:%函数M文件,不包含输入参数和输出参数functionmyfuncm=magic(4);%产生把4x4的魔方矩阵t=m.3;%将m中的每个元素求三次方disp(t);%在命令窗口中显示t的值,2020/6/1,二、使用脚本M文件编写的GUI程序,%创建界面窗口,不包含工具条h0=figure(toolbar,none,.position,200150450250,.name,ex54_2,.numbertitle,off);%在窗口中绘制正弦曲线x=0:0.5:2*pi;y=sin(x);h=plot(x,y);gridon,%创建静态文本控件hm=uicontrol(h0,style,text,.string,.绘图函数,.position,3801805020);%创建弹出式菜单控件hm=uicontrol(h0,style,popupmenu,.string,.sin(x)|cos(x)|sin(x)+cos(x),.position,3801505020);%设置弹出式菜单的第一项为默认选项set(hm,value,1),2020/6/1,%定义弹出式菜单的Callback,为字符数组my_callback=.v=get(hm,value);,.switchv,.case1,.delete(h),.y=sin(x);,.h=plot(x,y);,.gridon,.case2,.delete(h),.y=cos(x);,.,h=plot(x,y);,.gridon,.case3,.delete(h),.y=sin(x)+cos(x);,.h=plot(x,y);,.gridon,.end;%设置弹出式菜单的callback属性值set(hm,callback,my_callback);%设置坐标轴的位置和大小,坐标轴对象的units属性缺省值为normalizedset(gca,position,0.6);,2020/6/1,2020/6/1,三、根对象root,根对象是与计算机屏幕相对应的图形对象。只有一个根对象,根对象没有父对象,根对象的子对象是图形窗口对象。根对象的句柄值为0,在MATLAB中可以通过set和get来设置和获取根对象的一些属性。当用户启动MATLAB时,根对象就存在了。因此,根对象不需要用户来创建,用户也不能销毁根对象。,1、根对象的性质,2020/6/1,2、根对象常用属性和方法,2020/6/1,续前表:,2020/6/1,BusyAction、ButtonDownFcn、Clipping、CreateFcn、DeleteFcn、HandleVisibility、HitTest、Interruptible、Selected、SelectionHighlight、UicontextMenu、Visible。,以下属性对根对象是不起作用的:,2020/6/1,【例1】设置命令窗口中数字的显示格式,3、根对象的操作方法举例,%设置命令窗口中数字的显示格式为有理式rationalset(0,Format,rational)%或者使用命令formatrationala=133/444a=133/444%设置命令窗口中数字的显示格式为shortset(0,format,short)aa=0.2995,2020/6/1,【例2】查询屏幕尺寸和修改度量单位,get(0,units)%查询屏幕尺寸的度量单位ans=pixelsget(0,screensize)%获取以像素为单位的屏幕尺寸ans=111280800set(0,units,inch)%设置屏幕尺寸的度量单位为英寸get(0,screensize)%获取以英寸为单位的屏幕尺寸ans=0013.33338.3333get(0,ScreenPixelsPerInch)%查询屏幕分辨率ans=96,2020/6/1,【例3】设置命令窗口中输出内容的行间隔,get(0,FormatSpacing)%属性值为loose,行与行之间有间隔ans=looseset(0,FormatSpacing,compact)get(0,FormatSpacing)%属性值为compact,行与行之间没有间隔ans=compact,2020/6/1,【例4】控制命令窗口内容的分屏显示,如果在命令窗口中显示的内容超出命令窗口的范围,用户可以设置根对象的more属性值来实现分屏显示。set(0,more,on)%或者调用命令moreonset(0)CurrentFigureDiary:on|offDiaryFileEcho:on|offFixedWidthFontNameFormat:short|long|shortE|longE|shortG|longG|hex|bank|+|rational|debug|shortEng|longEngFormatSpacing:loose|compactLanguageMore:on|off-more-,用户可以按Enter键实现逐行滚动显示,或按空格键实现逐屏滚动显示。,2020/6/1,四、图形窗口对象figure,图形窗口对象就是计算机屏幕上的一个图形窗口,它的父对象是计算机屏幕,即root对象。因此,图形窗口对象继承了root对象的很多属性。属性可以在图形窗口对象创建时修改,也可以通过set命令来修改。,1、图形窗口对象的性质,2、图像窗口对象常用属性和方法,2020/6/1,续前表:,2020/6/1,续前表:,2020/6/1,3、图形窗口对象的操作举例,【例】图形窗口对象的操作方法,创建一图形窗口,去掉数字标题,将其标题改为“examplewindow”,隐去图形窗口的标准菜单栏,显示图形窗口的标准工具条,并将图形窗口对象的units属性设置为normalized,并设置其位置和大小。,functionmygui%使用缺省属性值创建图形窗口hf=figure;%设置图形窗口的部分属性值set(hf,toolbar,figure,menubar,none,numbertitle,off,.name,examplewindow,units,normalized,position,0.5);,2020/6/1,2020/6/1,五、坐标轴对象axes,坐标轴对象可以在图形窗口中定义绘图的区域,其父对象是图形窗口对象,而线条、图像、补片和文本对象等是它的子对象。在同一个图形窗口对象中可以有多个坐标轴对象。,1、坐标轴对象的性质,2、坐标轴对象的常用属性和方法,2020/6/1,续前表:,2020/6/1,续前表:,2020/6/1,3、坐标轴对象的操作举例,在图形窗口中创建坐标轴,并在坐标轴中绘制曲线。,%创建坐标轴对象haxes=axes(parent,hf,position,0.8);%初始化绘图数据x=0:pi/50:2*pi;y=sin(x);%指定当前坐标轴axes(haxes);%绘制图形plot(x,y,b*);,%设置坐标轴的文本为倾斜,x轴的颜色为红色set(gca,fontangle,italic,xcolor,100);%打开栅格gridon%给坐标轴对象添加标题title(我建立的第一个坐标轴);%给x和y轴添加标签xlabel(x坐标轴);ylabel(y坐标轴);,2020/6/1,2020/6/1,六、用户界面控件对象,下压按钮(pushbutton):通过鼠标点击按钮可以实现按钮的压下,并调用相应的回调函数来完成某项事务。双位按钮(togglebutton):点击按钮将使按钮保持按下或弹起状态,两种情况下可分别调用不同的回调函数来完成不同的事务。单选按钮(radiobutton):单选按钮通常以组为单位,一组单选按钮之间是一种互斥的关系,任一时刻一组单选按钮只能有一个按钮有效。复选框(checkbox):复选框通常也以组为单位,但某一时刻多个复选框可以同时有效。编辑框(edit):用户可以在编辑框中输入文本数据。编辑框的属性Max和Min用来控制是否允许多行输入,如果Max-Min1,则可以在编辑框中输入多行内容。此外,用户也可以利用编辑框来显示程序运行的结果。,1、MATLAB所支持的用户界面控件类型(R2008a),2020/6/1,静态文本(text):通常作为其它控件的标签,用户不能通过静态文本来输入程序运行的参数或调用相应的回调函数。滑动条(slider):用户可以通过滑动条来改变指定范围内的数值输入,滑动条的位置代表用户输入的数值。列表框(listbox):列表框显示由其string属性定义的一组选项,用户可以选择其中的一项或多项。列表框的属性Max和Min用来控制选择模式:如果Max-Min1,则允许多项选择;如果Max-Min1,则只允许单项选择。弹出式菜单(popupmenu):弹出式菜单可以打开并显示一个由其string属性定义的一组选项,弹出式菜单不像列表框那样有滑动条,它减少了对图形窗口空间的占用。框架(frame):框架是图形窗口中的一个可见的、封闭的矩形区域,它把一组互相关联的控件(例如一组单选按钮等)组合在一起,使得用户界面更容易理解。框架没有相关联的回调函数。目前,框架一般由面板(uipanel)和组合框(uibuttongroup)来代替。,2020/6/1,2、用户界面控件常用属性和方法,2020/6/1,续前表:,2020/6/1,3、用户界面控件编程要点,(1)如何设置控件的相关事件的回调函数,每个用户界面控件都有若干个回调函数,用来对用户触发的不同事件做出响应。Callback、ButtonDownFcn和KeyPressFcn等分别表示当用户选中控件、在控件上点击鼠标和按下键盘按键时调用的回调函数。如果用户需要处理这些事件,就需要设置和定义这些回调函数。因此,用户首先需要了解定义这些回调函数需要遵循的语法规则。,如果回调函数执行的语句较少,可在创建控件时直接将语句赋值给其回调函数,【例】定义下压按钮pushbutton的Callback属性,将要执行的语句用“”和“”符号括起来,作为Callback的属性值。内的每条命令必须用两个单引号“”括起来,每条语句之间必须用逗号“,”隔开。(见ex54_8.m),2020/6/1,functionDefineCallback%创建图形窗口对象hFig=figure(units,normalize,.position,0.2);%创建下压按钮对象,设置其Callback属性uicontrol(parent,hFig,.style,pushbutton,.String,ExecuteCallback,.units,normalize,.position,0.2,.callback,figure;,.x=0:pi/20:2*pi;,.y=sin(x);,.plot(x,y););,运行效果图:,程序代码:,2020/6/1,如果事件的处理较复杂,执行的语句较多,可以将控件的回调函数的代码写到单独的函数内,在这种情况下,MATLAB对定义回调函数有严格的语法规则,用户必须按照这些规则来定义回调函数。定义回调函数的语法规则如下表所列,表中内容是以定义pushbutton的Callback为例。,2020/6/1,在第一种情况下,回调函数没有输入参数,回调函数必须保存成单独的M文件。在第二种情况下,对象hObject的Callback属性设置为函数句柄的形式。这种情况下,回调函数myfile必须带两个参数:obj表示调用该回调函数的对象的句柄,如pushbutton的句柄;event是个结构体,其中包含了事件的信息。这时的回调函数可以是单独的函数M文件,也可以写在主函数M文件内。在第三种情况下,对象hObject的Callback属性设置为myfile,5,6,回调函数不仅必须带obj和event两个参数,而且还包含了用户需要传递的其它参数。其中,用户传递的参数的个数不受限制。这时,回调函数也必须保存成单独的M文件。在第四种情况下,对象hObject的Callback属性设置为myfile,5,6,回调函数不仅必须带obj和event两个参数,而且还包含了用户需要传递的其它参数。其中,用户传递的参数的个数不受限制。这时的回调函数可以是单独的函数M文件,也可以写在主函数M文件内。,【说明】,2020/6/1,%定义主函数functionDefineCallback%创建图形窗口对象hFig=figure(units,normalize,.position,0.2);%创建下压按钮对象,设置其Callback属性hPush=uicontrol(parent,hFig,.style,pushbutton,.String,ExecuteCallback,.units,normalize,.position,0.2);,【例】将Callback编写成单独的函数,set(hPush,callback,ex54_9_Callback)%定义回调函数,作为子函数functionex54_9_Callback(obj,event)figure;x=0:pi/20:2*pi;y=sin(x);plot(x,y);,2020/6/1,(2)按钮控件(pushbutton和togglebutton)增加背景图片,通过控件的CData属性,用户可以设置pushbutton和togglebutton的背景图片,以美化图形界面。实现的方法如下:设计一些按钮的图片,保存为jpg格式备用。例如示例中的mute.jpg。在图形窗口中创建按钮,对按钮进行初始化,设置其CData属性值。,【例】为按钮添加背景图片,functionex54_10%创建图形窗口对象hFig=figure(units,normalize,position,0.2);,2020/6/1,%创建下压按钮对象,设置其Callback属性hPush=uicontrol(parent,hFig,.style,pushbutton,.String,.units,normalize,.position,0.2);%读取按钮的背景图片a,map=imread(mute.jpg);%取得图片的尺寸r,c,d=size(a);%改变图片的大小,使其和按钮的大小相符x=ceil(r/30);y=ceil(c/30);g=a(1:x:end,1:y:end,:);%设置按钮的CData属性值set(hPush,CData,g);,程序运行效果图:,2020/6/1,(3)用户界面控件的编程方法,创建用户界面控件对象,用户可以在图形界面上创建上述所列的10种用户界面控件对象。创建这些对象需要调用MATLAB提供的uicontrol函数,见,其常用的调用格式如下:handle=uicontrol(parent,PropertyName,PropertyValue,.)其中,parent是父对象的句柄,指明要在什么对象中创建用户界面控件。parent可以是figure、uipanel或uibuttongroup的句柄。,用户想创建uipanel或uibuttongroup控件对象,可以分别调用uipanel函数和uibuttongroup函数。handle=uipanel(parent,PropertyName1,value1,PropertyName2,value2,.);handle=uibuttongroup(parent,PropertyName1,value1,PropertyName2,value2,.);,2020/6/1,【例5.4-11】在图形界面上创建uipanel控件,在uipanel上添加三个radiobutton,并设置第一个radiobutton为选中状态,functionex54_11%创建图形窗口对象hFig=figure(units,normalize,.position,0.2);%创建uipanel控件hPanel=uipanel(hFig,.Title,panel,.units,normalize,.position,0.8);%创建radiobutton控件hRadio1=uicontrol(parent,hPanel,.style,radiobutton,.String,radiobutton1,.units,normalize,.position,0.2,.value,1);,hRadio2=uicontrol(parent,hPanel,.style,radiobutton,.String,radiobutton2,.units,normalize,.position,0.2,.value,0);hRadio3=uicontrol(parent,hPanel,.style,radiobutton,.String,radiobutton3,.units,normalize,.position,0.2,.value,0);,2020/6/1,2020/6/1,处理用户界面控件的回调函数,假设某个用户界面控件的Callback设置为函数句柄的形式,hObject为执行Callback的对象的句柄,eventdata为包含事件信息的结构体。下面分别讲述各种控件的回调函数的处理方法。,checkbox用户可以通过查询列表框的Value属性值,来确定列表框是否被选中。,functioncheckbox1_Callback(hObject,eventdata)%判断checkbox是否被选中if(get(hObject,Value)=get(hObject,Max)%checkbox被选中,在这里添加处理代码else%checkbox未被选中,在这里添加处理代码end,2020/6/1,edit使用get命令,通过获取编辑框的String属性值,即可获得用户在编辑框中的输入内容。,functionedittext1_Callback(hObject,eventdata)user_string=get(hObject,String);%后续处理代码,其中,user_string为字符串类型,如果用户希望输入数值类型,则需要调用str2double函数对user_string进行转换,将字符串转换为数值。方法如下:user_value=str2double(user_string);,2020/6/1,listbox当列表框的Callback被触发时,其Value属性值为被选中的列表项的索引值,String属性值则是包含列表中所有条目的cell数组。,functionlistbox1_Callback(hObject,eventdata)%取得被选中条目的索引值index_selected=get(hObject,Value);%取得列表框中的所有条目,保存到list元胞数组中string_list=get(hObject,String);%根据索引值获取所选中的列表条目item_selected=string_listindex_selected;,2020/6/1,popupmenu弹出式菜单的操作方法与列表框类似。,functionpopupmenu1_Callback(hObject,eventdata)%取得被选中条目的索引值index_selected=get(hObject,Value);%取得弹出式菜单中的所有条目,保存到list元胞数组中string_list=get(hObject,String);%根据索引值获取所选中的条目,item_selected为字符串item_selected=string_listindex_selected;,2020/6/1,pushbutton下压按钮的Callback的处理较为简单,用户只要在其中加入要处理的程序代码,点击按钮,则Callback内的代码被执行,完成用户需要的操作。下面的代码在图形界面上创建一个按钮控件,当用户点击按钮时,调用命令来关闭图形窗口。,functionmyguihFig=figure(units,normalize,position,0.2);%创建按钮控件hButton=uicontrol(parent,hFig,style,push,String,pushbutton,units,normalize,position,0.2);%设置按钮控件的Callback属性set(hButton,Callback,pushbutton1_Callback);%按钮的回调函数functionpus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论