《MATLAB的GUI编程方法.pdf》由会员分享,可在线阅读,更多相关《MATLAB的GUI编程方法.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、一、引引言言在组合导航系统综合设计中,我主要负责应用 MATLAB 对纯捷联惯导、捷联/GPS 位置组合、速度组合、位置-速度组合等模式下的误差曲线进行绘制和比较。在此过程中,我了解了导航解算的一般流程。二、二、内内容容介介绍绍1、MATLAB 简简介介MATLAB 最初是专门用于矩阵数值计算的软件,经过多年的发展完善,现在已经成为流行的科学计算与工程计算软件工具之一。MATLAB 具备以下特点:1)程序环境高级并且容易掌握。具有与其他语言编写的程序相结合和输入输出格式化数据的能力;2)程序限制不严格,自由度大。拥有大量事先定义的数学函数,并且有很强大的用户自定义函数的能力;3)图形功能强
2、大。数据的可视化实现非常容易,可以轻松绘制各类二维、三维图形。并且 MATLAB 拥有较强的图形用户界面(GUI)的编辑能力。2、MATLAB 的的一一般般编编程程方方法法MATLAB 语言是由 C 语言编写的,因此它的语法与 C 语言有很大的相似之处。MATLAB 编写的程序文件成为 M 文件,分为脚本文件和函数文件两种。脚本文件是一个独立的程序文件。而函数文件则需要输入输出参数,拥有独立的工作区和变量,整体相当于一个函数,供其他程序文件调用。下面简单的介绍 M 文件的主要编程格式:1)如果是函数文件,则需要在文件的第一行定义函数:functionout1,out2,out3=FunName
3、(in1,in2,in3)顾名思义,中括号中的变量为输出参数,圆括号中的为输入参数;2)%后的字符串为注释内容;3)函数体部分跟 C 语言较为类似,拥有各种结构化的控制语句(如 for 循环、while 循环、switch 语句和 if 语句等),允许函数嵌套和递归;4)M 文件中可以使用匿名函数,用返回函数句柄,这样就不用为每个函数建立一个函数文件了;5)可以定义私有函数,只能由父 M 文件能调用它。实现方法是,在父 M 文件的目录里建立 private 文件夹,将私有函数放入该文件夹中。6)其他特性在这里不再赘述。3、MATLAB 的的 GUI 编编程程有 GUI 编程可以明显的体现出 M
4、ATLAB 语言的面向对象特征。MATLAB 的图形对象包括计算机屏幕、图形窗口、坐标轴、用户菜单、用户控件等。计算机是作为根对象,由系统自动建立。在创建每个图形对象时,都为该对象分配唯一的值,称其为图形对象句柄。如常用的 plot 函数的返回值就是所绘制的图形的句柄值。我们可以通过句柄,并利用 set/get 函数设置和获取对象的属性。创建 GUI 的方法很简单,一次选择 MATLAB 的菜单栏File-New-GUI,就进入了 GUI 的创建引导界面,选择 Blank GUI创建空白 GUI。这种方式成为 GUIDE 方式。接着就可以为 GUI 添加各种元素了,主要包括菜单,控件以及坐标轴
5、。3.1 菜单的创建菜单包括两种:主菜单和弹出式菜单(Context Menu)。创建菜单又可以按照两种方式进行命令行方式以及利用菜单编辑器。在命令行中创建主菜单的代码为:%首先创建主菜单,Label 为主菜单的标签名属性,标签名后面为主菜单的其他属性。f=uimenu(Label,LabelName,Property2,PropertyValue2,);%创建主菜单的各个子菜单,第一个参数即主菜单的句柄uimenu(f,Label,LabelName,Property2,PropertyValue2,);%可继续添加其他子菜单及子菜单的子菜单。相类似的,创建弹出式菜单的代码如下:%首先创建弹
6、出式菜单。cmenu=uicontextmenu(Property1,PropertyValue1,);%创建弹出式菜单的各个子菜单,第一个参数即主菜单的句柄。uimenu(f,Label,LabelName,Property2,PropertyValue2,);在创建其他对象的时候,可以将其属性的 UIContextMenu 定义为我们创建的 cmenu,那么在该对象上单击右键就会弹出我们创建的弹出式菜单,显示出其各个子菜单。当然我们有更加简洁的方法来创建两种菜单,在如前述那样新建了 GUI 以后,我们就会进入 Layout 编辑器界面,点击菜单栏-Tools-Menu Editor 可以打
7、开菜单编辑器,在这个界面里我们可以轻松的创建各级菜单和编辑菜单的属性。3.2 控件的创建进入 Layout 编辑器界面以后,在左侧有各类控件供用户添加。MATLAB 的主要控件如下:复选框(Check box),可编辑文本框(Editable text),列表框(Listsbox),弹出式菜单(Pop-up menus),命令按钮(Push buttons),单选按钮(Radio buttons),滑标(Sliders),静态文本框(Static text)。此外最底层带栅格的区域被称为框架(Frames),它也是具有控件属性的。接下来按照我们的需要添加各种控件,把整个 GUI 的外观先搭建起
8、来。3.3 控件及菜单属性大部分的控件属性都是与控件的外观有关的,这里不再赘述。我们在这里要强调的是 Callback 属性,它是我们的控件实现预期功能的关键。学习过 Windows 编程的同学都会知道,Callback 即回调的意思,在 MATLAB 中,Callback 是一个字符串,它的内容是一个可执行的代码,或者一个编译过的 M 文件名。这样当我们的控件被出发时,就会调用对应的函数,实现相应的功能。为了使我们设计的 GUI 看起来跟美观,我们可以使用菜单栏-Tools-Align Objects 来进行纵向和横向的对齐调整。3.4 GUI 编程方法在以上工作结束后,在自动生成的 M 文
9、件中,整个程序的框架已经形成了。接下来的工作就是对各个响应进行编程。GUI 所对应的 M 文件中,主要需要增加如下几部分代码:1)打开函数(Opening function),该函数在 GUI 可见之前实施操作;2)输出函数(Output function),在必要的时候向命令行输出数据;3)响应(Callbacks),在用户激活 GUI 中的相应控件时实施操作。M 文件常用的输入参数如下:1)hObject,图形或响应对象的句柄;2)handles,具有句柄或是用户数据的结构。关于 GUI 编程中一个重要的变量handles,它是一个包含所有GUI 对象的句柄结构,也可以向其中添加用户数据。
10、GUI 中的 handles 句柄结构可以通过各个控件的标签值(TAG)获得该控件的句柄,如一个按钮的 TAG 为 button,那么 handles.button就是该按钮的句柄。此外,要向 handles 结构中添加用户数据时,直接赋值即可,如:handles.userdata=2;%向 handles 结构中添加用户数据 userdata,值为2。这样的值为全局变量,可以用来进行各个响应间的数据通信。在修改过 handles 以后,应当保存新的 handles,方法如下:guidata(hObject,handles);hObject 为当前执行对象的句柄,如果当前的对象不是图形对象(f
11、igure),则存储到其父图形中。这里只是用来标识更新了 handles 结构体的图形是哪一个。注意:图形对象及 GUI 界面的最底层的栅格区域。它是所有控件的父图形。下面详细介绍打开函数、输出函数和响应的内容。1)打开函数打开函数包含在 GUI 可见之前进行操作的代码,用户可以在打开函数中访问所有函数,因为所有 GUI 中的对象都在调用打开函数之前就已经创建。对于一个文件名为 my_gui 的 GUI 来说,它的打开函数定义如下:function my_gui_OpeningFcn(hObject,eventdata,handles,varargin)在上面的程序语句中,除了上文提到的 hO
12、bject 和 handles 外,打开函数中还有如下参数:eventdata%该参数未定义,留给 MATLAB 后续版本改进用varargin%命令流语句通过该参数传递给打开函数。2)输出函数输出函数将输出结果返回。GUIDE 在输出函数中生成如下代码:function varargout=untitled_OutputFcn(hObject,eventdata,handles)varargout1=handles.output;由于在打开函数中,handles.output 已经被赋予了 GUI 的句柄,所以如果打开函数没有 uiwait 命令,那么输出函数只返回 GUI 句柄。如果打开函
13、数中有 uiwait(handles.figure1),则 M 文件在用户激活GUI 某控件前处于停止运行状态。这里的 figure1 就是 GUI 的图形对象。然后在需要输出返回值的控件的响应中添加:handles.output=ValueOut;guidata(hObject,handles);uiresume;%使 GUI 继续执行。类似的,可以在更多的响应中加入形如 handle.sencond_output 的其他输出,这些变量名可以自己命名,输入用户数据范畴。3)响应形式如下:function FunName_Callback(hObject,eventdata,handles);函数体就用来定义响应的控件被触发时所作出的处理。