资源描述
,九 GUI图形用户界面,*,*,*,*,*,*,GUI图形用户界面,其次讲 MATLAB,图形用户界面设计,设计原则和一般步骤,图形用户界面设计工具介绍,用户控件的制作,用户菜单的制作,回调函数,M函数文件实现图形用户界面,试验一:计算器程序,2.1,设计原则和一般步骤,1)分析界面所要实现的主要功能,明确设计任务。,2)绘界面草图,留意从使用者的角度来考虑界面布局。,3)利用GUI设计工具制作静态界面。,4)编写动态功能程序。,留意:,1)先完成大致界面布局,再编写功能程序。,2)界面风格要全都,且符合使用习惯。例如,一般习惯图形区在上面或左面,把握区在下面或右面等等。,11/16/2024,3,例如,以本次试验的内容“计算器”为例。,1)功能分析:完成数字的四则运算,以及一局部常用的科学计算:sin,cos,log等等。,2)界面草图:可以有多种风格的界面。给出几种设计草图。,草图一草图二草图三,3)利用GUI设计工具实现草图的布局,caculator.fig。,4)编写相应的程序完成计算器的各项功能,caculator.m。,11/16/2024,4,2.2,图形用户界面设计工具介绍,MATLAB6.5版本的GUI设计工具较前面的版本有很大的改善,设计界面变化很大。,翻开GUI设计工作台的命令:,guide%翻开设计工作台启动界面,guide file%在工作台中翻开文件名为file的用户界面,菜单项 File:New-GUI%翻开设计工作台启动界面,留意:guide命令中文件名不区分大小写。,翻开的GUI启动界面供给新建界面(Create New GUI)或翻开已有界面文件(Open Existing GUI)的属性页。新建界面可以选择空白界面、包含有控件的模板界面、包含有轴对象和菜单的模板界面、标准询问窗口等选项。,选择任意一项都会翻开GUI设计工作台,对界面静态组成局部进展的具体的修改都在工作台实现。,11/16/2024,5,GUI设计工具的启动界面,新建界面的选项,预览窗口,是否在新建时保存文件,最近打开的界面文件的列表,打开文件浏览器,11/16/2024,6,GUI设计工作台,设计工作区,主要由4个功能区,六个有用工具组成,控件选择区,菜单条,工具条,对齐工具,文件编辑,菜单编辑,对象属性,对象列表,运行界面,工作区,缩放句柄,11/16/2024,7,对象选择按钮,用来选取工作区上分布的控件。,单功能按键,按下操作代表确定的功能实现。,双位按键,代表“开”“关”两种状态。,互斥选择按钮,多个选项互斥选择时使用。,互容选择按钮,同时选中多个选项时使用。,编辑文本框,可以自由输入字符,编辑字符串,静态文本框,用于显示注释说明用文字,不行编辑。,滑动块,利用游标滑动,可以猎取不同的值。,控件区域框,用于对控件区域进展标识。,列表框,供给多个可供选择的选项,可以互容选择。,弹出框,带有多个选项,只能选择其中一项。,轴对象,用来显示图形。,用户控件列表:,11/16/2024,8,以“计算器”界面草图一为例。,1.初步布局,依据草图将控件选择区的相应控件拖拉到设计工作区的相应位置。,11/16/2024,9,2.修改控件属性,每一个控件都不行能是完全符合界面设计要求的,需要对其属性进展设置,以获得所需的界面显示效果。,可以通过双击该控件,或利用GUI设计工具的下拉菜单View:Property Inspector翻开控件属性对话框。属性对话框具有良好的交互界面,以列表的形式给出该控件的每一项属性。,例如右图是“+”按钮的属性列表。,11/16/2024,10,下面对各控件的主要属性进展一下说明。,1)双击设计工作区的空白局部,翻开整个图形窗的属性框。,MunuBar:none%图形窗是否使用标准菜单,Name:caculator%图形窗名称,Resize:off%图形窗不能缩放,Tag:mainWnd%图形窗的句柄 handles.mainWnd,2)静态文本编辑框的属性设置。,FontSize:15%字体大小,FontUnits:points%字体大小的度量单位,HorizontalAlignment:Center%对齐方式,String:Expression%待显示的字符,Tag:text1%该静态文本框的句柄handles.text1,Units:points%文本框度量单位,Units或FontUnits可选择:inches(英寸),centimeters(厘米),normalized(按比例缩放),points(点阵),pixels(像素),characters(字符)。假设选择normalized,那么当resize设为on时,控件或字体大小随着整个窗口的缩放而转变。,水平对齐方式 HorizontalAlignment可以是left,center,right。,控件句柄Tag有默认值,建议修改为带有具体含义的字符串,以增加程序可读性和便利回调函数调用。,11/16/2024,11,3)可编辑文本框的属性设置。,String:0%初始状态下显示数字0,Tag:pExp%可编辑文本框的句柄,其它和静态文本框一样,4)单功能按钮属性设置。以按钮“1”为例,String:1,Tag:p1,其它和静态文本框一样。,3.精细调整,利用对齐工具,排列控件的位置,使控件的大小、位置更加协调。,11/16/2024,12,4.界面激活,保存静态界面后,利用工具栏上的运行按钮激活该界面。激活后可以看到两个同名文件:caculator.m和caculator.fig。,caculator.m文件在M文本编辑器中翻开,caculator.fig文件显示为操作界面,但是无法实现任何功能,需要编写回调函数。,11/16/2024,13,2.4,回调函数,在M文本编辑器中翻开caculator.m文件,可以看到自动生成的回调函数,该函数的命名利用对象句柄进展区分,没有任何执行语句。,回调函数:Tag_Callback(hObject,eventdata,handles),通过参与自己的处理语句,可以实现所需的功能。,其中:,hObject是该控件的句柄;,eventdata是备用参数,目前没有定义;,handles是用户数据,本身是一个构造数组,存放了当前窗口的全部对象的句柄,包括图形窗本身、全部控件和菜单的句柄。并且可以增加一些域用来传递用户数据。,利用guidata(H,handles)可以更新 H 的用户数据。,11/16/2024,14,先设5个参数,handles.start=1;%不能一开头输入运算符号,handles.term=0;%运算完,进展新的运算,handles.repeat=0;%不能重复输入运算符号,handles.point=0;%不能重复输入点,handles.bracket=0;%输入sin,cos,log,log10后不能在输入数字,只能输入运算符号,11/16/2024,15,只用编0的程序来说明,其他从1到9都是一样的程序,function pushbutton0_Callback(hObject,eventdata,handles),%hObject handle to pushbutton0(see GCBO),%eventdata reserved-to be defined in a future version of MATLAB,%handles structure with handles and user data(see GUIDATA),if(handles.start)%假设没有数字按入,一开头运算符号无法输入,content=”;,set(handles.edit,”string”,content);%把空的内容显示出来,handles.start=0;,guidata(hObject,handles);%更新句柄构造,end,content=get(handles.edit,”string”);%把前面输入的内容保存在content中,if(handles.term)%计算完毕后,就为空,连续下一次输入,content=”;,handles.term=0;,guidata(hObject,handles);,end,if(handles.bracket)%sin,cos,log,log10输入后,不能在接数字,只能接运算符号,guidata(hObject,handles);,else,out=content,”0”;%把0与前面的内容相连起来,set(handles.edit,”string”,out);%把新内容显示出来,handles.repeat=0;%数字输入完可以输入运算符号了,guidata(hObject,handles);,end,%-Executes on button press in pushbutton1.,11/16/2024,16,其他从1到9都是一样的程序,function pushbutton10_Callback(hObject,eventdata,handles),11/16/2024,17,下面的程序是关于点的程序,if(handles.point)%不能连续输入点,guidata(hObject,handles);,else,handles.repeat=1;%输入点后不能在输入运算符号,if(handles.start)%假设没有数字按入,一开头运算符号无法输入,content=”;,set(handles.edit,”string”,content);,handles.start=0;,guidata(hObject,handles);,end,11/16/2024,18,content=get(handles.edit,”string”);,if(handles.term),content=”;,handles.term=0;,guidata(hObject,handles);,end,out=content,”.”;,set(handles.edit,”string”,out);,handles.repeat=1;,handles.point=1;,guidata(hObject,handles);,end,11/16/2024,19,下面是关于加法的程序,function pushbutton11_Callback(hObject,eventdata,handles),if(handles.start)%假设没有数字按入,一开头运算符号无法输入,content=”0.”;,set(handles.edit,”string”,content);,guidata(hObject,handles);,else,content=get(handles.edit,”string”);%把前面的内容取出来保存在content中,handles.term=0;%可以进展运算,11/16/2024,20,handles.point=0;%可以输入点,handles.bracket=0;%运算符号后可以输入sin,cos,log,log10,if(handles.repeat)%前面有运算符号,就不允许在输入运算符号,guidata(hObject,handles);,else,out=content,”+”;,set(handles.edit,”string”,out);,handles.repeat=1;%输入加号后就把handles.repeat置1,guidata(hObject,handles);,end,end,11/16/2024,21,下面是关于减法的程序,if(handles.start),content=”;,set(handles.edit,”string”,content);,handles.start=0;,guidata(hObject,handles);,end,content=get
展开阅读全文