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