图形用户界面 guide

guide(图形用户界面)【图形用户界面 guide】在MATLAB的命令行视窗中键入guide可以打开GUIDE 。这个命令将打开GUIDE Quick Start对话框 。它可以看作是一个简单的GUI应用程式的开发嚮导 。利用它可以使用滑鼠方便地在窗体上添加各种各样的控制项 。而且它会负责生成一个m档案,里边定义了各个控制项的回调函式,简化了GUI应用程式的开发 。当然matlab中GUI应用程式也可以使用纯代码生成 。在MATLAB中,关于guide的使用方法,参见帮助文档:MATLAB/Getting Started/Create Graphical User Interfaces/Laying Out a GUI/Starting GUIDE条目下 。
基本介绍中文名:图形用户界面
外文名:guide
设计:控制项对象及属性
用于表现:控制项的外形、功能及效果
 滚动条:可输入指定範围的数量值
概述在MATLAB的命令行视窗中键入guide可以打开GUIDE 。这个命令将打开GUIDE Quick Start对话框 。它可以看作是一个简单的GUI应用程式的开发嚮导 。利用它可以使用滑鼠方便地在窗体上添加各种各样的控制项 。而且它会负责生成一个m档案,里边定义了各个控制项的回调函式,简化了GUI应用程式的开发 。当然matlab中GUI应用程式也可以使用纯代码生成 。在MATLAB中,关于guide的使用方法,参见帮助文档:MATLAB/Getting Started/Create Graphical User Interfaces/Laying Out a GUI/Starting GUIDE条目下 。GUIDE(Graphical User Interfaces Development Environment) 是由视窗、游标、按键、选单、文字说明等对象(Objects)构成的一个用户界面 。用户通过一定的方法(如滑鼠或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等 。程式设计一. 控制项对象及属性(Object and its attributes of controller))1. GUI控制项对象类型(The mode of controller object)控制项对象是事件回响的图形界面对象 。当某一事件发生时,应用程式会做出回响并执行某些预定的功能子程式(Callback).2. 控制项对象的描述(Description of controller object)MATLAB中的控制项大致可分为两种,一种为动作控制项,滑鼠点击这些控制项时会产生相应的回响 。一种为静态控制项,是一种不产生回响的控制项,如文本框等 。每种控制项都有一些可以设定的参数,用于表现控制项的外形、功能及效果,既属性 。属性由两部分组成:属性名和属性值,它们必须是成对出现的 。(1) 按钮(Push Buttons):执行某种预定的功能或操作;(2) 开关按钮(Toggle Button):产生一个动作并指示一个二进制状态(开或关),当鼠点击它时按钮将下陷,并执行callback(回调函式)中指定的内容,再次点击,按钮复原,并再次执行callback中的内容;(3) 单选框(Radio Button):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项;(4) 複选框(Check Boxes):单个的複选框用来在两种状态之间切换,多个複选框组成一个複选框组时,可使用户在一组状态中作组合式的选择,或称为多选项;(5) 文本编辑器(Editable Texts):用来使用键盘输入字元串的值,可以对编辑框中的内容进行编辑、删除和替换等操作;(6) 静态文本框(Static Texts):仅仅用于显示单行的说明文字;(7) 滚动条(Slider): 可输入指定範围的数量值;(8) 框线(Frames):在图形视窗圈出一块区域;(9) 列表框(List Boxes):在其中定义一系列可供选择的字元串;(10)弹出式选单(Popup Menus): 让用户从一列选单项中选择一项作为参数输入;(11)坐标轴(Axes): 用于显示图形和图象3. 控制项对象的属性(Attributes of controller object)用户可以在创建控制项对象时,设定其属性值,未指定时将使用系统预设值 。两大类控制项对象属性:第一类是所有控制项对象都具有的公共属性,第二类是控制项对象作为图形对象所具有的属性 。A, 控制项对象的公共属性Children取值为空矩阵,因为控制项对象没有自己的子对象Parent取值为某个图形视窗对象的句柄,该句柄表明了控制项对象所在的图形视窗Tag取值为字元串,定义了控制项的标识值,在任何程式中都可以通过这个标识值控制该控制项对象Type取值为uicontrol,表明图形对象的类型UserDate取值为空矩阵,用于保存与该控制项对象相关的重要数据和信息Visible取值为no 或off,B,控制项对象的基本控制属性BackgroundColor取值为颜色的预定义字元或RGB数值Callback取值为字元串,可以是某个M档案名称或一小段MATLAB语句,当用户激活某个控制项对象时,应用程式就运行该属性定义的子程式 。Enable取值为on(预设值),inactive和offExtend取值为四元素矢量[0 ,0 width, height],记录控制项对象标题字元的位置和尺寸ForegroundColor取值为颜色的预定义字元或RGB数值Max,Min取值都为数值String取值为字元串矩阵或数组,定义控制项对象标题或选项内容Style取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listboxUnits取值可以是pixels, normalized, inches, centimeters或pointsValue取值可以是矢量,也可以是数值,其含义及解释依赖于控制项对象的类型C,控制项对象的修饰控制属性FontAngle取值为normal,italic, oblique,FontName取值为控制项标题等字型的字型档名 FontSize取值为数值,FontWeight取值为points,normalized, inches, centimeters或pixelsHorizontalAligment取值为left,right,定义对齐方式D, 控制项对象的辅助属性ListboxTop取值为数量值SliderStop取值为两元素矢量[minstep,maxstep],用于slider控制项Selected取值为on 或offSlectionHoghlight取值为on 或offE,Callback管理属性BusyAction取值为cancel或queueButtDownFun取值为字元串,一般为某个M档案名称或一小段MATLAB程式Creatfun取值为字元串,一般为某个M档案名称或一小段MATLAB程式DeletFun取值为字元串,一般为某个M档案名称或一小段MATLAB程式HandleVisibility取值为on,callback或offInterruptible取值为on 或off二.GUI开发环境(GUI DevelopmentEnvironment, GUIDE)MATLAB提供了一套可视化的创建图形视窗的工具,使用用户界面开发环境可方便的创建GUI应用程式, 它可以根据用户设计的GUI布局,自动生成M档案的框架,用户使用这一框架编制自己的应用程式 。MATLAB提供了一套可视化的创建图形用户接口(GUI)的工具,包括:*布局编辑器(Layout Edtor)-------在图形视窗中加入及安排对象 。布局编辑器是可以启动用户界面的控制台,上述工具都必须从布局编辑器中访问,用guide命令可以启动,或在启动平台视窗中选择GUIDE来启动布局编辑器 。*几何排列工具(Alignment Tool)-----调整各对象相互之间的几何关係和位置*属性编辑器(Property Inspector)-----查询并设定属性值*对象浏览器Object Browser)-----用于获得当前MATLAB图形用户界面程式中所有的全部对象信息,对象的类型,同时显示控制项的名称和标识,在控制项上双击滑鼠可以打开该控制项的属性编辑器 。*选单编辑器(Menu Editor)-----建立视窗选单条的选单和任何构成布局的弹出选单在MATLAB中,GUI的设计是以 M档案的编程形式实现的,GUI的布局代码存储在M档案和MAT档案中,而在MATLAB6中有了很大的改变,MATLAB6将GUI的布局代码存储在 FIG档案中,同时还产生一个M档案用于存储调用函式,在M档案中不再包含GUI的布局代码,在开发应用程式时代码量大大减少 。1. 布局编辑器(Layout editor):用于从控制项选择板上选择控制项对象并放置到布局区去,布局区被激活后就成为图形视窗 。在命令视窗输入GUIDE命令或点击工具列中的guide图示都可以打开空白的布局编辑器,在命令视窗输入GUIDEfilename 可打开一个已存在的名为filename图形用户界面 。(1)将控制项对象放置到布局区a. 用滑鼠选择并放置控制项到布局区内;b. 移动控制项到适当的位置;c. 改变控制项的大小;d. 选中多个对象的方法;(2) 激活图形视窗 选Tools选单中的Activate Figure项或点击工具条上的ActivareFigure按钮, 在激活图形视窗的同时将存储M 档案和FIG档案,如所建立的布局还没有进行存储,用户界面开发环境将打开一个Save As对话框,按输入的档案的名字,存储一对同名的M档案和带有.fig扩展名的FIG档案 。(3) 运行GUI程式 在命令视窗直接键入档案名称或用openfig, open或hgload命令运行GUI程式 。(4) 布局编辑器参数设定 选File选单下的Preferences选单项打开参数设定视窗,点击树状目录中的GUIDE,既可以设定布局编辑器的参数 。(5) 布局编辑器的弹出选单 在任一控制项上按下滑鼠右键,会弹出一个选单,通过该选单可以完成布局编辑器的大部分操作 。2. 几何位置排列工具(Alignment tool) 用于调节各控制项对象之间的相对位置 。3. 用属性编辑器设定控制项属性(Set attributes of controller with PropertyInspector) 在属性编辑器中提供了所有可设定的属性列表并显示出当前的属性 。(1)属性编辑器(Opening PropertyInspector):三种方法:1. 用工具列上的图示打开;2. 从View选单中选择Property Inspector选单项;3. 在按滑鼠右键弹出的Property Inspector选单中选择选单项 。(1) 使用属性编辑器(Using Property Inspector)a. 布置控制项b. 定义文本框的属性c. 定义坐标系d. 定义按钮属性e. 定义複选框4. 选单编辑器(Menu Editor): 包括选单的设计和编辑,选单编辑器有八个快捷键,可以利用它们任意添加或删除选单,可以设定选单项的属性,包括名称(Label)、标识(Tag)、选择是否显示分隔线(Separator above this item)、是否在选单前加上选中标记(Item ischecked)、调用函式(Callback) 。5. 对象浏览器(Object Browsers):用于浏览当前程式所使用的全部对象信息,可以在对象浏览器中选种一个或多个控制项来打开该控制项的属性编辑器 。三、GUI程式设计(GUI Program design)包括图形界面的设计和功能设计两个方面例1: 用于绘图和图形旋转的GUI:1、 布置控制项:一个坐标系、一个文本框、一个複选框,一个按钮2、 定义文本框的属性:String---简单设计示例,FontName---隶书,FontSize--223、 定义坐标系: Visible—off,4、 定义按钮属性: String—绘图,FontName,ForegroundColor, ontSize, BackgroundColor,Callback---surf(peaks(30))5、 定义複选框: String—rotate3D,Callback—rotate3d例2:设计一个简单信号分析仪的程式,要求根据输入的两个频率和时间间隔,计算函式x=sin(2πf1t)+sin(2πf2t) 的值,并对函式进行快速傅立叶变换,最后分别绘製时域和频域的曲线 。1. 设计图形界面(GUI Design)设计步骤:(1) 在布局编辑器中布置控制项,(2) 使用几何位置排列工具对控制项的位置进行调整;(3) 设计控制项的属性;(4) 设定其他绘图属性 。2. 设定控制项的标识(Set the Tag of controller)控制项的标识(Tag)是对于各控制项的识别,每个控制项载创建时都会由开发环境自动产生一个标识,在程式设计中,为了编辑、记忆和维护的方便,一般为控制项设定一个新的标识 。本例设定第一个坐标轴的标识为:frequency_axes,用于显示频域图形; 第二个坐标轴的标识为:time_axes, 用于显示时域图形 。三个文本编辑框的标识为f1_input, f2_input, t_input,分别用于输入两个频率和自变数时间的间隔.3. 编写代码(Editcode)GUI图形界面的功能,还是要通过一定的设计思路和计算方法,由特定的程式来实现 。为了实现程式的功能,还需要在运行程式前编写一些代码,完成程式中变数的赋值、输入输出、计算及绘图等工作 。一般方法为,内容为:%(1)设定对象的初始值;%分别设定三个文本编辑框的初始值为:f1_input=20f2_input=50f3_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(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')gridon%4)在第二个坐标轴中绘製时域曲线 。axes(handles.time_axes)%选择适当的坐标轴plot(t,x)set(handles.time_axes,'XminorTick','on')gridon运行程式(Running program)例3 :製作一个曲面光照效果的演示界面,如图所示,三个弹出式选单分别用于选择曲面形式、色彩图、光照模式和反射模式,三个滚动条用于确定光源的位置,一个按钮用于退出演示 。製作要点:(1)建立一个静态文本,用于显示界面的标题:光照效果演示;(2)建立坐标轴对象,用于显示图形;(3)建立四个下拉选单,分别用于选择绘图表面的形状、色图、光照模式和反射模式,每个下拉选单的上方都有一个静态文本用于说明选单的作用;(4)在一个frame上建立三个滑条用于确定光源的位置,并在frame上方加一说明;(5)建立一个按钮用于退出演示;callback函式的内容为:functionvarargout = pushbutton1_Callback(h, eventdata, handles, varargin)delete(handles.figure1)%--------------------------------------------------------------------functionvarargout = popupmenu1_Callback(h, eventdata, handles, varargin)val=get(h,'value');switchvalcase1surf(peaks);case2sphere(30);case3membranecase4[x,y]=meshgrid(-4:.1:4);r=sqrt(x.^2+y.^2)+eps;z=sinc(r);surf(x,y,z)case5[x,y]=meshgrid([-1.5:.3:1.5],[-1:0.2:1]); z=sqrt(4-x.^2/9-y.^2/4);surf(x,y,z);case6t=0:pi/12:3*pi;r=abs(exp(-t/4).*sin(t));[x,y,z]=cylinder(r,30);surf(x,y,z);endshadinginterplight('Position',[-3-2 1]);axisoff%--------------------------------------------------------------------functionvarargout = radiobutton1_Callback(h, eventdata, handles, varargin)set(h,'value',1)set(handles.radiobutton2,'value',0)set(handles.radiobutton3,'value',0)set(handles.radiobutton4,'value',0)lightingflat%--------------------------------------------------------------------functionvarargout = 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)lightinggouraud%--------------------------------------------------------------------functionvarargout = 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) lightingphong%--------------------------------------------------------------------functionvarargout = radiobutton4_Callback(h, eventdata, handles, varargin)set(h,'value',1)set(handles.radiobutton1,'value',0)set(handles.radiobutton3,'value',0)set(handles.radiobutton3,'value',0)lightingnone%--------------------------------------------------------------------functionvarargout = popupmenu2_Callback(h, eventdata, handles, varargin)val=get(h,'value');switchvalcase1colormap(jet)case2colormap(hot)case3colormap(cool)case4colormap(copper)case5colormap(pink)case6colormap(spring)case7colormap(summer)case8colormap(autumn)case9colormap(winter)end%--------------------------------------------------------------------functionvarargout = popupmenu3_Callback(h, eventdata, handles, varargin)val=get(h,'value');switchvalcase1lighting flatcase2lighting gouraudcase3lighting phongcase4lighting noneend%--------------------------------------------------------------------functionvarargout = popupmenu4_Callback(h, eventdata, handles, varargin) val=get(h,'value');switchvalcase1material shinycase2material dullcase3material metalcase4material defaultend%--------------------------------------------------------------------functionvarargout = slider1_Callback(h, eventdata, handles, varargin)val=get(h,'value');set(handles.edit1,'string',num2str(val));lx==val;ly=get(handles.slider2,'value'); ly=get(handles.slider3,'value');light('Position',[xy z]);%--------------------------------------------------------------------functionvarargout = 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(handles.slider3,'value');light('Position',[xy z]);%--------------------------------------------------------------------functionvarargout = 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',[xy z]);%-------------------------------------------------------------------- functionvarargout = edit2_Callback(h, eventdata, handles, varargin)str=get(h,'string');set(handles.slider2,'value',str2num(str));%--------------------------------------------------------------------functionvarargout = slider3_Callback(h, eventdata, handles, varargin)val=get(h,'value');set(handles.edit3,'string',num2str(val));%--------------------------------------------------------------------functionvarargout = edit3_Callback(h, eventdata, handles, varargin)str=get(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) 档案保存对话框:用于保存档案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(…)5) 列印设定对话框:用于列印页面的互动式设定dlg=pagesetupdlg(fig)pagedlgpagedlg(fig)6) 列印预览对话框:用于对列印页面进行预览printpreviewprintpreview(f)7) 列印对话框:printdlgprintdlg(fig)printdlg(‘-crossplatform’,fig)printdlg(-‘setup’,fig)2、MATLAB专用对话框1)错误信息对话框:用于提示错误信息errordlg打开默认的错误信息对话框errordlg(‘errorstring’)打开显示’errorstring’信息的错误信息对话框errordlg(‘errorstring’,’dlgname’)打开显示’errorstring’信息的错误信息对话框,对话框的标题由‘dlgname’指定erordlg(‘errorstring’,’dlgname’,’on’)打开显示’errorstring’信息的错误信息对话框,对话框的标题由‘dlgname’指定. 如果对话框已存在,’on’参数将对话框显示在最前端 。h=errodlg(…)返回对话框句柄例:errordlg('输入错误,请重新输入','错误信息')2) 帮助对话框:用于帮助提示信息helpdlg 打开默认的帮助对话框helpdlg(‘helpstring’)打开显示’errorstring’信息的帮助对话框,helpdlg(‘helpstring’,’dlgname’)打开显示’errorstring’信息的帮助对话框, 对话框的标题由‘dlgname’指定h=helpdlg(…)返回对话框句柄例:helpdlg('矩阵尺寸必须相等','线上帮助')3) 输入对话框:用于输入信息answer=inputdlg(prompt)打开输入对话框,prompt为单元数组,用于定义输入数据视窗的个数和显示提示信息,answer为用于存储输入数据的单元数组 。answer=inputdlg(prompt,title)与上者相同,title确定对话框的标题 。answer=inputdlg(prompt,title,lineNo)参数lineNo可以是标量、列矢量或m×2阶矩阵,若为标量,表示每个输入视窗的行数均为lineNo;若为列矢量,则每个输入视窗的行数由列矢量lineNo的每个元素确定;若为矩阵,每个元素对应一个输入视窗,每行的第一列为输入视窗的行数,第二列为输入视窗的宽度 。answer=inputdlg(prompt,title,lineNo,de