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和off
Extend取值为四元素矢量[0 ,0 width, height],记录控制项对象标题字元的位置和尺寸
ForegroundColor取值为颜色的预定义字元或RGB数值
Max,Min取值都为数值
String取值为字元串矩阵或数组,定义控制项对象标题或选项内容
Style取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox
Units取值可以是pixels, normalized, inches, centimeters或points
Value取值可以是矢量,也可以是数值,其含义及解释依赖于控制项对象的类型
C,控制项对象的修饰控制属性
FontAngle取值为normal,italic, oblique,
FontName取值为控制项标题等字型的字型档名
FontSize取值为数值,
FontWeight取值为points,normalized, inches, centimeters或pixels
HorizontalAligment取值为left,right,定义对齐方式
D, 控制项对象的辅助属性
ListboxTop取值为数量值
SliderStop取值为两元素矢量[minstep,maxstep],用于slider控制项
Selected取值为on 或off
SlectionHoghlight取值为on 或off
E,Callback管理属性
BusyAction取值为cancel或queue
ButtDownFun取值为字元串,一般为某个M档案名称或一小段MATLAB程式
Creatfun取值为字元串,一般为某个M档案名称或一小段MATLAB程式
DeletFun取值为字元串,一般为某个M档案名称或一小段MATLAB程式
HandleVisibility取值为on,callback或off
Interruptible取值为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--22
3、 定义坐标系: 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=20
f2_input=50
f3_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');
switchval
case1
surf(peaks);
case2
sphere(30);
case3
membrane
case4
[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);
case6
t=0:pi/12:3*pi;
r=abs(exp(-t/4).*sin(t));
[x,y,z]=cylinder(r,30);
surf(x,y,z);
end
shadinginterp
light('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');
switchval
case1
colormap(jet)
case2
colormap(hot)
case3
colormap(cool)
case4
colormap(copper)
case5
colormap(pink)
case6
colormap(spring)
case7
colormap(summer)
case8
colormap(autumn)
case9
colormap(winter)
end
%--------------------------------------------------------------------
functionvarargout = popupmenu3_Callback(h, eventdata, handles, varargin)
val=get(h,'value');
switchval
case1
lighting flat
case2
lighting gouraud
case3
lighting phong
case4
lighting none
end
%--------------------------------------------------------------------
functionvarargout = popupmenu4_Callback(h, eventdata, handles, varargin)
val=get(h,'value');
switchval
case1
material shiny
case2
material dull
case3
material metal
case4
material default
end
%--------------------------------------------------------------------
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) 档案打开对话框:用于打开档案
uigetfile
uigetfile(‘FilterSpec’)
uigetfile(‘FilterSpec’,’DialogTitle’)
uigetfile(‘FilterSpec’,’DialogTitle’,x,y)
[fname,pname]=uigetfile(…)
2) 档案保存对话框:用于保存档案
uiputfile
uiputfile(‘InitFile’)
uiputfile(‘InitFile’,’DialogTitle’)
uiputfile(‘InitFile’,’DialogTitle’,x,y)
[fname,pname]=uiputfile(…)
3) 颜色设定对话框:用于图形对象颜色的互动设定
c=uisetcolor(‘h_or_c,’DialogTitle’)
4) 字型设定对话框:用于字型属性的互动式设定
uisetfont
uisetfont(h)
uisetfont(S)
uisetfont(h,’DialogTitle’)
uisetfont(S,’DialogTitle’)
S=uisetfont(…)
5) 列印设定对话框:用于列印页面的互动式设定
dlg=pagesetupdlg(fig)
pagedlg
pagedlg(fig)
6) 列印预览对话框:用于对列印页面进行预览
printpreview
printpreview(f)
7) 列印对话框:
printdlg
printdlg(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,defAns) 参数defans为一个单元数组,存储每个输入数据的默认值,元素个数必须与prompt 所定义的输入视窗数相同,所有元素必须是字元串。
answer=inputdlg(prompt,title,lineNo,defAns,Sesize) 参数resize决定输入对话框的大小能否被调整,可选值为on或off.
例:prompt={'Input Name','Input Age'};
title='InputName and Age';
lines=[21]';
def={'JohnSmith','35'};
answer=inputdlg(prompt,title,lines,def);
4) 列表选择对话框:用于在多个选项中选择需要的值
[selection,ok]=listdlg(‘Liststring’,S,…)输出参数selection为一个矢量,存储所选择的列表项的索引号,
输入参数为可选项’Liststring’(单元数组), ’SelectionMode’(’single’或’multiple’,’ListSize’([wight,height]), ’Name’ (对话框标题)等
5) 信息提示对话框:用于显示提示信息
msgbox(message)打开信息提示对话框,显示message信息。
msgbox(message,title)title确定对话框标题。
msgbox(message,title,’icon’)icon用于显示图示,可选图示包括:none(无图示)/error/help/warn/custom(用户定义)
msgbox(message,title,’custom’,icondata,iconcmap)当使用用户定义图示时,icondata为定义图示的图像数据,iconcmap为图像的色彩图。
msgbox(…,’creatmode’)选择模式creatmode,选项为:modal, non_modal, 和replace。
h=msgbox(…) 返回对话框句柄
6) 问题提示对话框:用于回答问题的多种选择
button=questdlg(‘qstring’)打开问题提示对话框,有三个按钮,分别为:yes,no和cancel,’questdlg’确定提示信息。
button=questdlg(‘qstring’,’title’)title确定对话框标题。
button=questdlg(‘qstring’’title’,’default’)当按回车键时,返回default值default 必须是yes,no或cancel之一。
button=questdlg(‘qstring’,’title’,’str1’,’str2’,’default’)打开问题提示对话框,有两个按钮,分别由str1和str2确定,’qstdlg’确定提示信息,default必须是str1或str2之一。
button=questdlg(‘qstring’,’title’,’str1’,’str2’,’str3’,’default’) 打开问题提示对话框,有三个按钮,分别由str1,str2和str3确定,’qstdlg’确定提示信息,default必须是str1, str2或str3之一。
7) 进程条:以图形方式显示运算或处理的进程
h=waitbar(x,’title’)显示以title为标题的进程条,x为进程条的比例长度,其值必须在0到1之间,h为返回的进程条对象的句柄。
waitbar(x,’title’,’creatcancelbtn’,’button_callback’)在进程条上使用creatcancelbtn参数创建一个撤销按钮,在进程中按下撤销按钮将调用button_callback函式。
waitbar(…,property_name,property_value,…)选择其它由prompt_name定义的参数,参数值由prompt_value指定。
例:
h=waitbar(0,'pleaswait...');
fori=1:10000
waitbar(i/10000,h)
end
close(h)
8)警告信息对话框:用于提示警告信息
h=warndlg(‘warningstring’,’dlgname’)打开警告信息对话框,显示warningstring信息,dlgname确定对话框标题,h为返回对话句柄。