已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
由MATLABGUIDE创建GUI这两天,本人写了四篇关于由MATLABGUIDE创建GUI的文章,见迈特莱博。包括MATLAB GUIDE基本操作、MATLABGUI基础知识、MATLABGUICallback函数基本操作和MATLABGUIDE数据传递机制。这是本人一个学期教学总结。学期结束了,对本学期MATLAB课程进行总结,发现又有新的动向:在同学们提交的作业中,有大半是用MATLABGUIDE完成的(以前最多20%几,增加一倍)。本学期新增加的教学内容(MATLABGUIDE编程),看来是有用的,受到了同学们的欢迎,看来,MATLABGUIDE工具更适合当代年轻人的思维模式可视化编程。针对这一情况,相信有更多的网友希望了解这方面知识,所以,写了四篇文章做了系统介绍,但由于虎踞龙蟠SBBS访问量少,为使更多网友受益,所以想到整理一下,发个百度文库。记得我的文章“用MATLAB解方程的三个实例”及“用matlab求定积分的三个实例”等文章均有网友做为百度文库发布,访问量甚至超过原文章,所以,该项工作我提前做了。以下是四篇文章内容,不当之处请批评指正。一、MATLAB GUIDE基本操作GUIDE是MATLAB图形用户接口开发环境(Graphical User Interface Development Environment)的简称,它提供了一系列工具用于建立GUI对象。这些工具极大简化了设计和创建GUI的过程。使用GUI可以完成两项工作:(1)GUI图形界面布局;(2)GUI编程。1.运行GUIDE有三种方法可以启动GUIDE:(1)在命令行输入: guide(2)单击MATLAB主窗口的 (GUIDE)按钮;(3)单击MATLAB主窗口【Start】按钮,出现弹出菜单,在主程序组【MATLAB】中选择“GUIDE(GUI Builder)”选择项。以上三种方法均:生成GUIDE快速启动对话框,如图所示。2.创建新的GUI创建新的GUI时,样板可以选择以下4种:(1)Blank GUI 一个空的样板;(2)GUI with Uicontrols 打开包含一些uicontrol对象的GUI编辑器;(3)GUI with Axes and Menu 打开包含菜单和一些坐标轴图形对象的GUI编辑器;(4)Modal Question Dialog 打开一个对话框编辑器,默认为一个问题对话框。一般采用Blank GUI样板。单击OK按钮后,进入GUI编辑界面,如图所示。3.打开已保存的文件在快速启动对话框中选择打开已经存在的GUI时,可通过浏览的方式找到本地磁盘上的用户GUI文件,或在已打开过的列表中直接选择要打开的文件。如图所示。4.GUI编辑界面组成GUI编辑界面主要包括3部分:GUI对象选择区、GUI工具栏和GUI布局区。下面分别介绍这3个部分。(1)GUI对象选择区打开【File】|【Preferences.】|GUIDE,勾选show name in component palette,则在编辑界面显示GUI对象名称,如图所示。(2)GUI工具栏GUI工具栏主要由对齐对象、菜单编辑器、Tab顺序编辑器、M文件编辑器、属性查看器、对象浏览器和运行界面组成。(3)GUI布局区GUI布局区用于布局GUI对象。在布局区单击鼠标右键,弹出的菜单如图所示。5.属性查看器属性查看器用来查看、设置或修改对象的属性,是GUI编辑器的主要功能。调用对象属性查看器有四种方法:(1)在对象上双击;(2)在对象上右击,选择Property Inspector;(3)选中对象后,单击工具栏上的 (Property Inspector)按钮;(4)菜单栏选择:【View】|Property Inspecto。如下图所示为pushbutton1按钮对象的属性。6.GUI的M文件创建一个用户界面应用程序,缺省有两个文件组织,*.fig和*.m。均由MATLAB的GUIDE工具自动生成,其中自动生成的M文件,控制并决定GUI对用户操作的响应。它包含运行GUI所需要的所有代码。GUIDE自动生成M文件的框架,用户在该框架下编写GUI组件的回调函数。M文件由一系列子函数构成,包含主函数、Opening函数、Output函数和回调函数。其中主函数不能修改,否则容易导致GUI界面初始化失败。7.实例例如,新建一个文件名为abc的GUI,并在界面上建一个按钮,点击该按钮,则绘出以下图形,界面和其对应的M文件如下:function varargout = abc(varargin)% ABC M-file for abc.fig% ABC, by itself, creates a new ABC or raises the existing% singleton*.% H = ABC returns the handle to a new ABC or the handle to% the existing singleton*.% ABC(CALLBACK,hObject,eventData,handles,.) calls the local% function named CALLBACK in ABC.M with the given input arguments.% ABC(Property,Value,.) creates a new ABC or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before abc_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to abc_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help abc% Last Modified by GUIDE v2.5 30-Mar-2010 13:22:20% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, abc_OpeningFcn, . gui_OutputFcn, abc_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before abc is made visible.function abc_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to abc (see VARARGIN)% Choose default command line output for abchandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes abc wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = abc_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout1 = handles.output;% - Executes on button press in pushbutton2.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)figuret=0:0.1:2*pi;plot(t,sin(t),-,t,cos(t)legend(正弦,余弦,Location,Best)二、MATLAB GUI基础知识用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标都可成为与计算机交换信息的接口。 图形用户界面(Graphical User Interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。 假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI的制作。但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。也是体现用户综合运用MATLAB的能力。1.控件种类GUI首先是一个窗口(对话框),窗口上除菜单外(菜单专门介绍),控件是一种实现用户与计算机交互的主要途径,利用这些控件可以实现有关控制。这些控件名称如下:(1)按钮(Push Button)(2)双位按钮(Toggle Button)(3)单选按钮(Radio Button)(4)复选框(Check Box)(5)列表框(List Box)(6)弹出框(Popup Menu)(7)编辑框(Edit Box)(8)滑动条(Slider)(9)静态文本(Static Text)(10)边框(Frame)2.控件的四个重要属性控件有四个重要属性,它们是:style 、callback、string 和position。(1)style 控件类型。在MATLAB中,控件使用统一函数创建,即uicontrol,控件类型用于区分不同类型的控件。在GUIDE中,该属性自动设置。(2)callback 回调函数。即单击或双击一个控件要执行的回调命令,其默认为%automatic,不做修改,这个Callback就会自动指向M文件编辑器里的函数体内。(3)string 控件名称。即字符串变量,用来说明控件的功能或作用,提示用户选择相应操作;在编辑框控件中,用来设置初值;(4)posion 位置。标识控件在当前窗口中所处的位置,以数组的形式表述,即a,b,c,d。其中a,b代表控件左下角起始位置,c,d代表控件大小。3.控件的其他常用属性(1)unit 屏幕单位。共有六种,它们是英寸(inches)、厘米(centimeters)、归一化(normalized)、点(points)、像素(pixels)和字符(characters),其中像素是缺省单位。使用较方便的是归一化单位,即屏幕(或窗口)左下角为(0,0),右上角为(1,1)。(2)fontsize 字体大小。控件名称字符串字体大小设置,同unit属性一样,一般定义整个窗口为统一的缺省设置值。(3)value 控件的值。在单选按钮中,设置“1”表示选中,设置“0”表示非选中,且只能有1个处于选中状态;(4)max,min 最大值与最小值。在滑动条控件中,用来设置滑动值范围;(5)sliderstep 步长。在滑动条控件中,用来设置点击滑动条两端的小尖头或点击滑动区域滑动条滑动的距离。4.回调函数用户对控件进行操作(如鼠标单击、双击或移动,键盘输入等)的时候,控件对该操作进行响应,所指定执行的函数,就是该控件的回调函数,也称callback函数。该函数不会主动执行,只在用户对控件执行特定操作时执行。采用函数编写的GUI中,控件回调属性的值一般为字符串单元数组,每个单元均为一条MATLAB语句(指令),语句按单元顺序排列。每条MATLAB语句用单引号引起来,语句本身含有的单引号改为两个单引号。采用GUIDE创建的GUI中,控件回调函数指令可直接放在该对应控件的函数中,指令写法与命令行一致。5.Callback程序若要在M文件编辑器里编写Callback程序,那么属性检查器里的Callback则不能作任何修改,默认为%automatic,也就是当用户将GUI存储并打开M文件编辑器后,这个Callback就会自动指向M文件编辑器里的Callback函数,如在上一篇博文提到的示例,“按钮”的Callback函数中包含了四行指令,点击(激动)该按钮,则会立即执行该四行命令,绘出图形。function pushbutton1_Callback(hObject, eventdata, handles)figuret=0:0.1:2*pi;plot(t,sin(t),-,t,cos(t)legend(正弦,余弦,Location,Best)三、MATLAB GUI Callback程序基本操作Callback是控件回调函数的一种属性,用户对控件进行操作的时候,控件对该操作进行响应,所指定执行的函数,就是该控件的回调函数,也称callback函数。一般情况下,该函数包含一组命令,即一段程序。而在该程序中,通常首先要获取界面上的各控件的值,如:编辑框中输入的内容或单选框是选择哪个选项等,相当于一般计算机语言程序开头部分的赋值语句,而后面的计算分析等语句,包括分支、循环等控制,同一般程序编写方法并无差别,所以,以下主要介绍GUI界面中数据的获取方法。1.图形对象MATLAB的图形对象包括计算机屏幕、图形窗口、坐标轴、用户菜单、用户控件、曲线、曲面、文字、图像、光源、区域块和方框等。系统将每一个对象按树型结构组织起来。即:根:图形对象的根,对应于计算机屏幕,根只有一个,其它所有图形对象都是根的后代。图形窗口: 根的子代,窗口的数目不限,所有图形窗口都是根屏幕的子代,除根之外,其它对象则是窗的后代。界面控制:图形窗口的子代,创建用户界面控制对象,使得用户可采用鼠标在图形上作功能选择,并返回句柄。界面菜单: 图形窗口的子代,创建用户界面菜单对象。 轴:图形窗口的子代,创建轴对象,并返回句柄,线面字块像的父辈。线:轴的子代,创建线对象。面:轴的子代,创建块对象。字:轴的子代,创建字对象。块:轴的子代,创建块对象。像:轴的子代,创建图像对象。2.MATLAB图形对象句柄 句柄概念在WINDOWS编程中是一个很重要的概念,在许多地方都扮演着重要的角色。句柄的概念是:在Windows环境中,句柄是用来标识项目的,这些项目包括:*.模块(module)、*.任务(task)、*.实例(instance)、*.文件(file)、*.内存块(block of memory)、*.菜单(menu)、*.控制(control)、*.字体(font)、*.资源(resource),包括图标(icon),光标(cursor),字符串(string)等。MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。MATLAB通过图形对象句柄来设置或获取其某一属性的值。3.图形对象属性MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值称为属性值。如一个按钮是一个控件,而Callback则是按钮的属性名,所执行的回调函数则是属性值。获取某一控件的属性值用get函数。get函数的调用格式为:V=get(句柄,属性名)。其中句柄代表某一控件,V是返回的属性值。 设置某一控件的属性值用set函数。set函数的调用格式为:set(句柄,属性名1,属性值1,属性名2,属性值2,)。其中句柄用于指明要操作的图形对象。4.Callback程序基本操作Callback程序首先要在图形界面上获得各各控件的值,然后进行一系列计算过程,最后将计算结果用图形的方式或字符串的方式显示在图形界面上。(1)通过以下方式得到按钮pushbutton1的句柄:h1=handles.pushbutton1 或 h1=findobj(tag,pushbutton1)(2)如果已知某一编辑框的句柄为hh(得到方法同上),从该编辑框获取输入内容,用以下语句:str = get(hh,String);(3)如果编辑框输入的是数值,要参与后面的程序计算,则需要对数据类型进行转换,即:instr = str2num(get(hh,String);(4)还有一种情况,如果获取当前控件的值,用以下方法即可:instr = str2double(get(hObject,String); %从编辑框获取输入值(5)或不用事先得到控件的句柄,直接通过结构数组获得编辑框控件edit1的值:instr = str2double(get(handles.edit1,String); %从编辑框获取输入值(6)将计算结果显示在编辑框edit2中,用以下方法:set(handles.edit2,String,str); %其中str是字符串变量。(7)如果计算结果是数值型,则要进行转换:str=num2str(n); %n为数值型变量(8)如果要将计算结果绘出图形,并绘制在界面上预先定义的坐标轴axes1中,则在绘图命令前加上以下语句,使axes1成为当前坐标轴:axes(handles.axes1) % handles.axes1即为坐标轴axes1的句柄四、MATLAB GUIDE 数据传递机制在使用GUIDE编程中,主要工作是对Callback函数的程序编写与调试,除了编程部分外,数据调用与传递是比较重要的,也是必须掌握的。Callback函数的调试主要在M文件中进行。1.GUIDE的函数M文件由一系列子函数构成,包含主函数、Opening函数、Output函数和回调函数。第一行为主函数声明,必须指定主函数名,且与文件名相同;varargin为输入参数,varargout为输出参数。Opening Opening函数是在GUI开始运行但还不可见的时候执行,主要进行一些初始化操作,为GUI第一个执行的函数。Output Output函数是必要时可输出数据到命令行,是第二个执行的函数,以上两个函数只会执行一次。Callbacks Callbacks函数是当用户每次触发GUI对象时,一般都会执行一个相应的回调函数。2.GUIDE的参数当创建GUI时,输入参数varargin为空;当用户触发GUI对象时,varargin为一个14的单元数组:第一个单元为所要执行回调函数的函数名。例如,用户单击了Tag值为pushbutton1的pushbutton对象,此时varargin1=pushbutton1_Callback,即为要执行的回调函数pushbutton1_Callback的函数名。第24个单元为该回调函数的输入参数:hObject、eventdata和handles。hObject为当前回调函数对应的GUI对象的句柄,eventdata为未定义的保留参数,handles为当前GUI所有数据的结构体,包含所有GUI对象的句柄和用户定义的数据。所以,用户要定义一个变量pc,可使用如下方法:handles.pc=10 %变量pc可以在任何一个控件的Callback函数中调用。3.两个重要的结构数组GUIDE创建的GUI的M文件中,除主函数外的所有函数都有如下两个输入参数:(1)hObject 在Opening函数和Output函数中,表示当前figure对象的句柄;在Callback函数中,表示该callback函数所属对象的句柄;(2)handles GUI数据。包含所有对象信息和用户数据的结构体,相当于一个GUI对象和用户数据的“容器”。所以,在程序中经常使用以下语句更新数据:guidata(hObject, handles);4. MATLAB GUIDE中数据在MATLAB GUI中,数据分两种:GUI data和Application data。两种数据的存取机制是相同的,但是GUI data使用起来比较方便。每一个GUI 图形界面都维持一个和自己的界面的图形(figure)相联系的一个handles数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的“容器”,里面存放了figure内所有控件的句柄。5. MATLAB GUIDE数据访问机制handles结构可以被figure内所有控件的回调函数访问,因为回调函数的输入参数中都有handles结构。此外,在控件的回调函数内可以把数据存储到handles结构中。例如,在编辑框edit1的回调函数内想获得该编辑框的句柄,hObject可以,也可以用handles.edit1,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已:hObject是调用回调函数时直接传过来的,handles.edit1是从handles结构中取得的。各控件的回调函数中,hObject的值是不一样的,分别代表调用回调函数的控件的句柄,而handles结构却是一样的。这种机制便于figure内的不同控件的回调函数内传递数据。6.GUIDE 数据传递机制如果把figure对象当做一个大缸,而把其他对象例如axes、button等等当做这个大缸里的小缸,那么handles就相当于这个大缸的句柄,可以用大缸的句柄来设置小缸的属性,例如handles.pushbutton1。hObject就相当于每一个小缸的句柄了,例如,要改变当前控件的某一属性,可以直接在响应控件的function里添加:set(hObject,property,value);也可以在另外的控件里改变其属性:set(handles.pushbutton1,property,value);handles和hObject都是“句柄”,储存了它所代表的“那个对象”的信息;只不过handles代表的是当前整个界面,hObject代表的是当前的这个控件(比如按钮,编辑框)因为回调函数的输入参数中都有handles结构,如:function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)所以,这种数据传递机制是很方便和容易掌握的。7.实例一:编辑框数据获得在按钮控件中调用以下是三个Callback函数:(1)密度function density_Callback(hObject, eventdata, handles)density = str2double(get(hObject, String); %获得
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学《车辆工程-机械原理与机械设计》考试备考题库及答案解析
- 戏剧家协会财务预算实施办法
- 食品机械厂蒸汽锅炉安全操作制度
- 2024参军心理测试题库及答案
- 工业机器人系统运维员基本考试题及答案
- 2020-2025年一级注册建筑师之设计前期与场地设计能力提升试卷B卷附答案
- 激光工艺面试题及答案解析
- 2025年中级经济师经济模型试题及答案
- 2025年材料员之材料员基础知识能力测试试卷附答案
- 某电子音乐制作工作室专辑制作推广工作方案
- 2025年人工智能算法工程师校招笔试模拟题及答案解析
- 2024新版2025秋八年级上册历史全册教案教学设计含大单元整体教学设计
- 2025版实习生实习期间责任保险合同范本
- 2025年南京保安考试题库
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 光伏电站试运行验收报告
- 2025至2030年中国水光针行业市场全景调研及投资前景研判报告
- 父母帮忙带娃协议书
- 中小学思政课教师培训
- 模切行业的应用与发展
- 去冰岛旅游景点
评论
0/150
提交评论