《五GUI图形用户界面》由会员分享,可在线阅读,更多相关《五GUI图形用户界面(31页珍藏版)》请在金锄头文库上搜索。
1、1,五 GUI图形用户界面,设计原则和一般步骤 图形用户界面设计工具介绍 用户控件的制作 用户菜单的制作 回调函数 M函数文件实现图形用户界面实验一:计算器程序,2,5.1 设计原则和一般步骤,3,例如,以本次试验的内容“计算器”为例。1) 功能分析:完成数字的四则运算,以及一部分常用的科学计算:sin, cos, log等等。2) 界面草图:可以有多种风格的界面。给出几种设计草图。草图一 草图二 草图三3) 利用GUI设计工具实现草图的布局,experiment1.fig。4) 编写相应的程序完成计算器的各项功能,experiment1.m。,4,5.2 图形用户界面设计工具介绍,MATLA
2、B6.5版本的GUI设计工具较前面的版本有很大的改善,设计界面变化很大。打开GUI设计工作台的命令:guide %打开设计工作台启动界面guide file %在工作台中打开文件名为file的用户界面菜单项 File:New-GUI %打开设计工作台启动界面注意:guide命令中文件名不区分大小写。打开的GUI启动界面提供新建界面( Create New GUI )或打开已有界面文件( Open Existing GUI )的属性页。新建界面可以选择空白界面、包含有控件的模板界面、包含有轴对象和菜单的模板界面、标准询问窗口等选项。选择任意一项都会打开GUI设计工作台,对界面静态组成部分进行的具
3、体的修改都在工作台实现。,5,GUI设计工具的启动界面,6,GUI设计工作台,设计工作区,主要由4个功能区,六个实用工具组成,菜单条,7,5.3 用户控件的制作,用户控件列表:,五 GUI图形用户界面,对象选择按钮,用来选取工作区上分布的控件。 单功能按键,按下操作代表一定的功能实现。 双位按键,代表“开”“关”两种状态。 互斥选择按钮,多个选项互斥选择时使用。 互容选择按钮,同时选中多个选项时使用。 编辑文本框,可以自由输入字符,编辑字符串 静态文本框,用于显示注释说明用文字,不可编辑。 滑动块,利用游标滑动,可以获取不同的值。 控件区域框,用于对控件区域进行标识。 列表框,提供多个可供选择
4、的选项,可以互容选择。 弹出框,带有多个选项,只能选择其中一项。 轴对象,用来显示图形。,8,以“计算器”界面草图一为例。1. 初步布局,根据草图将控件选择区的相应控件拖拉到设计工作区的相应位置。experiment1.fig,9,2. 修改控件属性,每一个控件都不可能是完全符合界面设计要求的,需要对其属性进行设置,以获得所需的界面显示效果。,可以通过双击该控件,或利用GUI设计工具的下拉菜单View: Property Inspector打开控件属性对话框。属性对话框具有良好的交互界面,以列表的形式给出该控件的每一项属性。例如右图是“+”按钮的属性列表。,10,下面对各控件的主要属性进行一下
5、说明。 1) 双击设计工作区的空白部分,打开整个图形窗的属性框。MunuBar: none %图形窗是否使用标准菜单Name: Experiment1 %图形窗名称Resize: off %图形窗不能缩放Tag: mainWnd %图形窗的句柄 handles.mainWnd 2) 静态文本编辑框的属性设置。以“Expression”文本框为例FontSize: 15 %字体大小FontUnits: points %字体大小的度量单位HorizontalAlignment: Center %对齐方式String: Expression %待显示的字符Tag: text1 %该静态文本框的句柄h
6、andles.text1Units: points %文本框度量单位,Units或FontUnits可选择:inches(英寸),centimeters (厘米), normalized(按比例缩放),points(点阵), pixels (像素), characters(字符)。如果选择normalized,那么当resize设为on时,控件或字体大小随着整个窗口的缩放而改变。水平对齐方式 HorizontalAlignment可以是left, center, right。控件句柄Tag有默认值,建议修改为带有具体含义的字符串,以增加程序可读性和方便回调函数调用。,11,3) 可编辑文本框的
7、属性设置。String: 0 %初始状态下显示数字0Tag: pExp %可编辑文本框的句柄其它和静态文本框相同 4) 单功能按钮属性设置。以按钮“1” 为例String: 1Tag: p1其它和静态文本框相同。3. 精细调整利用对齐工具,排列控件的位置,使控件的大小、位置更加协调。,12,4. 界面激活保存静态界面后,利用工具栏上的运行按钮激活该界面。激活后可以看到两个同名文件:experiment1.m和experiment1.fig。experiment1.m文件在M文本编辑器中打开,experiment1.fig文件显示为操作界面,但是无法实现任何功能,需要编写回调函数。,13,5.4
8、 用户菜单的制作,图形用户界面有一个标准图形窗菜单,包括五个菜单项:File, Edit, Tools, Windows, Help。默认情况下,利用GUI工具设计的图形界面是不显现菜单项的。可以通过修改图形界面的“MenuBar”属性值选择显示标准图形窗菜单“figure”或不显示菜单“none”。在GUI图形界面设计工具中打开刚才的experiment1.fig界面(或利用guide experiment1命令),单击工具条上的菜单编辑器打开空白菜单编辑界面。利用编辑界面上的New Menu和New Menu Item,以及可以对菜单项进行上下左右调整的四个工具创建合适的菜单。注意:菜单属
9、性中的“Label”是显示的菜单名称,“Tag”是该菜单项的句柄,“callback”是该菜单的回调函数,不需修改,采用默认值。,五 GUI图形用户界面,14,15,5.5 回调函数,在M文本编辑器中打开experiment1.m文件,可以看到自动生成的回调函数,该函数的命名利用对象句柄进行区分,没有任何执行语句。回调函数:Tag_Callback(hObject, eventdata, handles),通过加入自己的处理语句,可以实现所需的功能。其中:hObject是该控件的句柄;eventdata是备用参数,目前没有定义;handles是用户数据,本身是一个结构数组,存放了当前窗口的所有
10、对象的句柄,包括图形窗本身、所有控件和菜单的句柄。并且可以增加一些域用来传递用户数据。利用guidata( H, handles )可以更新 H 的用户数据。,五 GUI图形用户界面,16,对本例来说,首先需要定义几个用户变量,以便记录参加运算的数值,进行计算。 function Experiment1_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;handles.s_Exp=; %以字符串的形式记录计算表达式handles.s_Num=; %以字符串的形式记录编辑框中要显示的数值handle
11、s.i=1; % s_Exp的计数器handles.j=1; % s_Num的计数器handles.flag=0; %用来区分四则运算和其他运算的标志% Update handles structureguidata(hObject, handles);,17,数字按钮的回调函数,以数字1按钮的回调函数为例: function p1_Callback(hObject, eventdata, handles)handles.s_Exp(handles.i)=1;handles.s_Num(handles.j)=1;handles.i=handles.i+1;handles.j=handles.j
12、+1;guidata(handles.mainWnd,handles);set(handles.pExp,string,handles.s_Num),18,四则运算的回调函数,以“+”为例 function pAdd_Callback(hObject, eventdata, handles) if handles.flaghandles.s_Exp(handles.i)=);handles.flag=0;handles.i=handles.i+1; end handles.s_Exp(handles.i)=+; handles.j=1; handles.s_Num=; handles.i=ha
13、ndles.i+1; guidata(handles.mainWnd,handles); set(handles.pExp,string,handles.s_Num),19,其它运算的回调函数,以“sin”为例 function pSin_Callback(hObject, eventdata, handles) handles.s_Exp(handles.i:handles.i+3)=sin(; handles.flag=1; handles.j=1; handles.s_Num=; handles.i=handles.i+4; guidata(handles.mainWnd,handles
14、); set(handles.pExp,string,handles.s_Num),20,Calculate按钮的回调函数,和“计算”菜单的回调函数一样。 function pDone_Callback(hObject, eventdata, handles) tryif handles.flaghandles.s_Exp(handles.i)=);handles.flag=0;handles.i=handles.i+1;endeval(s=,handles.s_Exp,;);set(handles.pExp,string,num2str(s) catcherrordlg(The input
15、dont fit the calculation) end,21,Reset按钮的回调函数,和“清零”菜单的回调函数一样。 function pClear_Callback(hObject, eventdata, handles)handles.s_Exp=;handles.s_Num=;handles.i=1;handles.j=1;handles.flag=0;guidata(handles.mainWnd,handles)set(handles.pExp,string,),22,5.6 M函数文件实现图形用户界面 exm05_1.m,1. 用户控件制作函数:H=uicontrol( H_
16、parent,style,Sv, pName, pVariable,)H为该控件的句柄,H_parent为控件父句柄,Sv为控件类型pName和pVariable为一对值,用来确定控件的一个属性。例如:H0=experiment1;H1=uicontrol(H0,style,text,. horizontalalignment,left,.position,0.65,0.05,0.8,0.05,.units,normalized,.string,Design by minnow);轴对象直接利用axes命令生成:H1=axes(position,0.1, 0.1, 0.5, 0.5),五 GUI图形用户界面,pushbuttontogglebuttonradiobuttoncheckboxedittextsliderframelistboxpopupmenu,