版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图形用户界面主要内容图形用户界面的一般步骤图形用户界面设计图形用户界面设计工具应用M函数文件实现图形用户界面1.图形用户界面
图形用户界面就是通过窗口、菜单、按钮、文字说明等对象构成一个美观的界面,提供用户利用鼠标或键盘方便地实现操作。
MATLAB设计图形用户界面的方法有两种:使用可视化的界面环境(图形用户界面设计工具)和通过编写程序。
一般制作步骤界面制作包括界面设计和程序实现。分析界面所要实现的主要功能,明确设计任务;绘界面草图,注意从使用者的角度来考虑界面布局;按构思的草图,上机制作静态界面;编写界面动态功能程序。图形用户界面设计可视化的界面环境
MATLAB6.5版本提供的GUI设计工具较前面的版本有较大的改善,设计界面变化很大。打开GUI设计工具的方法有以下几种:(1)选择菜单“File”——“New”——“GUI”命令;(2)在指令窗口输入以下命令:
guide
打开空白设计工作台
guideFN
在工作台中打开文件名为FN
的用户界面注意:在guide指令作用下,待打开的文件名不分字母的大小写。Matlab为GUI设计一共准备了4种模板,分别是:BlankGUI(Default)(空白模板,默认);GUIwithUicontrols(带控件对象的GUI模板);GUIwithAxesandMenu(带坐标轴与菜单的GUI模板);ModalQuestionDialog(带模式问题对话框的GUI模板)。
当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。7.2图形用户界面设计(续)如在指令窗键入:guide,则可得到如下GUI设计工具的启动界面:空白界面有控件的模板界面有轴对象和菜单的模板界面标准询问窗口7.2图形用户界面设计(续)
若激活打开已有界面文件(OpenExistingGUI)的属性页,则可通过打开文件浏览器(Browse)选定需打开文件并打开,主窗口则显示最近打开的界面文件的列表。最近打开的界面文件列表打开文件浏览器图形用户界面设计窗口
图形用户界面GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等4个功能区组成。
在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI设计窗口。选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。左图为空白GUI模板情形菜单条编辑工具条控件模板区设计工作区GUI设计窗口的菜单栏有File、Edit、View、Layout、Tools和Help6个菜单项,使用其中的命令可以完成图形用户界面的设计操作。
编辑工具在菜单栏的下方,提供了常用的工具;设计工具区位于窗口的左半部分,提供了设计GUI过程中所用的用户控件;空间模板区是网格形式的用户设计GUI的空白区域。
Matlab提供了一套可视化的创建图形窗口的工具,使用图形用户界面开发环境可方便地创建GUI应用程序,它可以根据用户设计的GUI布局,自动生成M文件的框架,用户使用这一框架编制自己的应用程序。一、图形用户界面开发环境(GUIDE)
Matlab提供了一套可视化的创建图形用户接口(GUI)的工具,包括:7.2图形用户界面设计(续)
在工具栏主要提供了六个工具:对象对齐工具、菜单编辑器、文件编辑器、属性编辑器、界面激活工具和对象浏览器,单击这六个按钮就会出现相应的窗口。对象对齐工具菜单编辑器文件编辑器属性编辑器对象浏览器运行界面对象浏览器(ObjectBrowser)——用于获得当前Matlab图形用户界面程序中的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器;布局编辑器(LayoutEdtor)——在图形窗口中创建及布置图形对象。布局编辑器是可以启动用户界面的控制面板,上述工具都必须从布局编辑器中访问,用guide命令可以启动,或在启动平台窗口中选择GUIDE来启动布局编辑器;几何排列工具(AlignmentTool)——调整各对象相互之间的几何关系和位置;属性查看器(PropertyInspector)——查询并设置属性值;菜单编辑器(MenuEditor)——创建、设计、修改下拉式菜单和快捷菜单;Tab顺序编辑器(TabOrderEditor)——用于设置当用户按下键盘上的Tab键时,对象被选中的先后顺序。
在Matlab5中,
GUI的设计是以M文件的编程形式实现的,GUI的布局代码存储在M文件和MAT文件中,而在Matlab
6中有了很大的改变,Matlab
6将GUI的布局代码存储在FIG文件中,同时还产生一个M文件用于存储调用函数,在M文件中不再包含GUI的布局代码,在开发应用程序时代码量大大减少。
用于从控件选择板上选择控件对象并放置到布局区去,布局区被激活后就成为图形窗口。在命令窗口输入GUIDE命令或点击工具栏中的guide图标都可以打开空白的布局编辑器,在命令窗口输入GUIDEfilename可打开一个已存在的名为filename图形用户界面。1.布局编辑器(Layouteditor)
将控件对象放置到布局区
用鼠标选择并放置控件到布局区内;移动控件到适当的位置;改变控件的大小;选中多个对象的方法。一个简单的布局示例
如所建立的布局还没有进行存储,可用File菜单下的SaveAs菜单项(或工具栏中的对应项),按输入的文件的名字,在激活图形窗口的同时将存储一对同名的M文件和带有.fig扩展名的FIG文件。
激活图形窗口
运行GUI程序
在命令窗口直接键入文件名或用openfig,open或hgload命令运行GUI程序。
布局编辑器参数设置选File菜单下的Preferences菜单项打开参数设置窗口,点击树状目录中的GUIDE,即可以设置布局编辑器的参数。
布局编辑器的弹出菜单
在任一控件上按下鼠标右键,会弹出一个菜单,通过该菜单可以完成布局编辑器的大部分操作。2.位置调整工具(Alignmenttool)
在选中多个对象后,可以方便的通过对象位置调整器调整对象间的对齐方式和距离。
对象位置调整器中的第一栏是垂直方向的位置调整,第二栏是水平方向的位置调整。
利用位置调整工具,可以对GUI对象设计区内的多个对象的位置进行调整。位置调整工具的打开方式有两种:从GUI设计窗口的工具栏上选择AlignObjects命令按钮;选择Tools菜单下的AlignObjects...菜单项,就可以打开对象位置调整器。
利用对象属性查看器,可以查看每个对象的属性值,也可以修改、设置对象的属性值。3.用属性查看器设置控件属性
打开属性查看器(OpeningPropertyInspector)对象属性查看器的打开方式有四种:从GUI设计窗口工具栏上选择PropertyInspector命令按钮;选择View菜单下的PropertyInspector菜单项;在控件对象上单击鼠标右键,选择弹出菜单的PropertyInspector菜单项。在命令窗口中输入inspect;
布置控件;定义文本框的属性;定义坐标轴的属性;定义按钮的属性;定义复选框。
使用属性查看器(UsingPropertyInspector)利用菜单编辑器,可以创建、设置、修改下拉式菜单和快捷菜单。选择Tools菜单下的MenuEditor...子菜单,即可打开菜单编辑器。4.菜单编辑器(MenuEditor)菜单也可以通过编程实现,方法为从GUI设计窗口的工具栏上选择MenuEditor命令按钮,打开菜单编辑程序。7.2.2创建用户菜单1.菜单编辑在GUI设计工作台的菜单条选择“Tool”-”MenuEditor…”或单击工具栏“MenuEditor”按钮,就会出现菜单编辑器窗口。新建菜单新建子菜单菜单左、右移菜单上、下移删除菜单填写菜单名,如果在前面加“&”符号则加快捷键,当运行时第一个字母会加下划线,以便用户快速激活菜单项标记分隔符初值是否已选输入回调函数菜单编辑器包括菜单的设计和编辑,菜单编辑器有八个快捷键,可以利用它们任意添加或删除菜单,可以设置菜单项的属性,包括名称(Label)、标识(Tag)、选择是否显示分隔线(Separatorabovethisitem)、是否在菜单前加上选中标记(Itemischecked)、调用函数(Callback)。
菜单编辑器左上角的第一个按钮用于创建一级菜单项。第二个按钮用于创建一级菜单的子菜单。
菜单编辑器的左下角有两个按钮,选择第一个按钮,可以创建下拉式菜单。选择第二个按钮,可以创建ContextMenu菜单。选择它后,菜单编辑器左上角的第三个按钮就会变成可用,单击它就可以创建ContextMenu主菜单。在选中已经创建的ContextMenu主菜单后,可以单击第二个按钮创建选中的ContextMenu主菜单的子菜单。与下拉式菜单一样,选中创建的某个ContextMenu菜单,菜单编辑器的右边就会显示该菜单的有关属性,可以在这里设置、修改菜单的属性。
菜单编辑器左上角的第四个与第五个按钮用于对选中的菜单进行左移与右移,第六与第七个按钮用于对选中的菜单进行上移与下移,最右边的按钮用于删除选中的菜单。通过uimenu命令创建菜单h_menu=uimenu(h_parent,’PropertyName’,ProperValue,…)>>h_menu=uimenu(h_fig,’lable’,’paint’)%创建菜单paint例子在后面(自学部分)5.对象浏览器(ObjectBrowsers)
利用对象浏览器,可以查看当前设计阶段的各个句柄图形对象。可以在对象浏览器中选中一个或多个控件来打开该控件的属性编辑器。对象浏览器的打开方式有:从GUI设计窗口的工具栏上选择ObjectBrowser命令按钮;选择View菜单下的ObjectBrowser子菜单;在设计区域单击鼠标右键,选择弹出菜单的ObjectBrowser。6.Tab顺序编辑器(TabOrderEditor)
利用Tab顺序编辑器(TabOrderEditor),可以设置用户按键盘上的Tab键时,对象被选中的先后顺序。Tab顺序编辑器的打开方式为:选择Tools菜单下的TabOrderEditor...菜单项,就可以打开Tab顺序编辑器。从GUI设计窗口的工具栏上选择TabOrderEditor...命令按钮。1.GUI控件对象类型
控件对象是事件响应的图形界面对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(Callback).2.控件对象的描述Matlab中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如文本框等。
每种控件都有一些可以设置的参数,用于表现控件的外形、功能及效果,既属性。属性由两部分组成:属性名和属性值,它们必须是成对出现的。二、控件对象及属性详见下表所示:
在GUI设计窗口创建图形对象后,通过双击该对象,就会显示该对象的属性编辑器。常用控件
控件名PropertyName功能按钮PushButton最常用的控件,用于响应用户的鼠标单击,按钮上有说明文字说明其作用。切换按钮ToggleButton当单击时会凹凸状态切换。单选按钮RadioButton当单击时会用黑白点切换,总是成组出现,多个单选按钮互斥,一组中只有一个被选中。复选框CheckBox当单击时会用√切换,有选中、不选中和不确定等状态,总是成组出现,多个复选框可同时选用。文本框EditText凹形方框,可随意输入和编辑单行和多行文字,并显示出来。静态文本框StaticText用于显示文字信息,但不接受输入。滚动条Slider可以用图示的方式显示在一个范围内数值的大概值范围,用户可以移动滚动条改变数值。框架Frame将一组控件围在框架中,用于装饰界面。列表框ListBox显示下拉文字列表,用户可以从列表中选择一项和多项。弹出式菜单PopupMenu相当于文本框和列表框的组合,用户可以从下拉列表中选择。坐标轴Axes用于绘制坐标轴。
用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。3.控件对象的属性(Attributesofcontrollerobject)
两大类控件对象属性:第一类是所有控件对象都具有的公共属性,第二类是控件对象作为图形对象所具有的属性。控件对象的公共属性Children取值为空矩阵,因为控件对象没有自己的子对象;Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象;Type
取值为uicontrol,表明图形对象的类型;Visible取值为on或off。UserDate取值为空矩阵,用于保存与该控件对象相关的重要数据和信息;Parent取值为某个图形窗口对象的句柄,该句柄表明了控件对象所在的图形窗口;BackgroundColor取值为颜色的预定义字符或RGB数值;缺省值为浅灰色;Callback取值为字符串,可以是某个M文件名或一小段Matlab语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序;Enable取值为on(缺省值),inactive和off;Extend取值为四元素矢量[0,0,width,height],记录控件对象标题字符的位置和尺寸;ForegroundColor取值为颜色的预定义字符或RGB数值,该属性定义控件对象标题字符的颜色;缺省值为黑色;Max,Min取值都为数值,缺省值分别为1和0;String取值为字符串矩阵或块数组,定义控件对象标题或选项内容;Style取值可以是pushbutton(缺省值),radiobutton,checkbox,edit,text,slider,frame,popupmenu或listbox;Units取值可以是pixels(缺省值),normalized(相对单位),inches,centimeters(厘米)或points(磅);Value取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型。控件对象的基本控制属性FontAngle取值为normal(正体,缺省值),italic(斜体),oblique(方头);FontName取值为控件标题等字体的字库名;FontSize取值为数值;FontUnits取值为points(缺省值),normalized,inches,centimeters或pixels;FontWeight取值为normal(缺省值),light,demi和bold,定义字符的粗细;HorizontalAligment取值为left,center(缺省值)或right,定义控件对象标题等的对齐方式。控件对象的修饰控制属性ListboxTop取值为数量值,用于listbox控件对象;SliderStep取值为两元素矢量[minstep,maxstep],用于slider控件对象;Selected取值为on或off(缺省值)
;SlectionHoghlight取值为on或off(缺省值)
。控件对象的辅助属性BusyAction取值为cancel或queue(缺省值)
;ButtDownFun取值为字符串,一般为某个M文件名或一小段Matlab程序;Creatfun取值为字符串,一般为某个M文件名或一小段Matlab程序;DeletFun取值为字符串,一般为某个M文件名或一小段Matlab程序;HandleVisibility取值为on(缺省值),callback或off;Interruptible取值为on或off(缺省值)
。Callback管理属性控件的常用属性
创建控件以后,需要对控件的各种属性进行设置,大部分控件都具有以下属性。(1)string属性:用于显示在控件上的字符串,起说明或提示作用。(2)callback属性:回调函数,与菜单的一样。(3)enable属性:表示该控件是否有效,”on“表示有效,”off“表示无效。(4)tooltipstring属性:当鼠标放在控件上时显示提示信息,为字符串。(5)字体属性:包括fontname,fontsize等。(6)Tag属性:控件的标记,用于标识控件。
用uicontrol命令创建控件h_control=uicontrol(h_Parent,’PropertyName’,ProperValue,…)例子在后面(自学部分)包括图形用户界面的设计和功能设计两个方面。三、GUI程序设计
实现GUI的基本机制是对控件的属性编程。在设计界面中选定需要编写回调函数的对象,然后选择菜单”View”-“ObjectCallbacks”,就会出现4个子菜单,都是用来编写回调函数的。当选择各选单项时,MATLAB会提醒用户保存设计的界面,然后打开M文件编辑器/调试器,可看到机器自动生成了一个函数文件,用户即可在该文件中带%--标记的行填写回调指令,其余指令用户不必也不能更改。例10
使用PushButton按钮与静态文本框设计GUI,在窗口中显示单击按钮次数。(1)
在界面上安装一个命令按钮和一个静态文本框(2)
使用对象的属性窗口设置控件的属性
实现GUI的基本机制是对控件的属性编程。在设计界面中选定需要编写回调函数的对象,然后选择菜单”View”-“ObjectCallbacks”,就会出现4个子菜单,都是用来编写回调函数的。
当选择各选单项时,MATLAB会提醒用户保存设计的界面,然后打开M文件编辑器/调试器,可看到机器自动生成了一个函数文件,用户即可在该文件中带%--标记的行填写回调指令,其余指令用户不必也不能更改。回调函数:三、GUI程序设计(界面设计和功能设计)图形用户界面设计工具应用例:利用GUI工具设计用户界面。该界面具有以下功能:(1)在编辑框中,可输入表示阻尼比的标量或“行数组”
数值,并在按【enter】键后,在轴上画出相应的蓝色曲线(坐标范围:X轴[0,15];Y轴[0,2])。(2)在点击【Gridon】或【Gridoff】键时,在轴上画出或删除“分格线”;缺省时无分格线。(3)在菜单【Options】下,有2个下拉菜单【Boxon】和【Boxoff】;缺省时为Boxoff状态。(4)所设计的界面和其上图形对象、控件对象都按比例缩放。图形用户界面设计工具应用(续)界面最终效果图如下所示:图形用户界面设计工具应用(续)
由于本例的设计界面清晰、要求明确,所以无需进行功能分析和绘制草图,而可直接进入界面制作阶段。图形用户界面设计工具应用(续)
使用“guide”命令启动GUI界面,选择“BlankGUI”出现GUI设计工作台,调整图形大小,将界面窗口左边的控件模板区中的控件拖放到设计工作区中。
放置以下控件:一个坐标轴、两个静态文本框、一个可编辑文本框、两个按钮;然后打开对象对齐工具对齐各控件,界面布局如下图。图形用户界面设计工具应用(续)图形用户界面设计工具应用(续)2.设置控件属性
双击工作区及控件可引出图形窗和相应控件的“属性编辑框(PropertyInspector)”。
在图形窗的属性编辑框中,设置如下属性值:NameMyguil%图形窗的名称Resizeon%图形窗可以缩放Tagfiguer1
%生成handles.figure1域存放图形窗句柄图形用户界面设计工具应用(续)在轴属性编辑框中,设置如下属性值:Unitsnormalized%采用相对度量单位,缩放时保持比例Boxoff%坐标轴不封闭Tagaxes1%生成handles.axes1域存放轴句柄XLim[0,15]%X轴范围YLim[0,2]%Y轴范围
图形用户界面设计工具应用(续)在图形区上方的静态文本的属性编辑框中,设置如下属性值:Fontsize0.696%字体大小FontUnitsnormaliszed%采用相对度量单位,缩放时保持字体比例String
归一化二阶系统的阶跃响应曲线%显示在界面上的字符Tagtitle_text%生成handles.title_text域存放静态文本句柄HorizontalAlignmentCenter%文字中心对齐Unitsnormalized%采用相对度量单位,缩放时保持该区比例
图形用户界面设计工具应用(续)在可编辑文本上方的静态文本的属性编辑框中,设置如下属性值:Fontsize0.351%字体大小FontUnitsnormaliszed%采用相对度量单位,缩放时保持字体比例HorizontalAlignmentCenter%文字中心对齐String系统阻尼比
%显示在界面上的字符Tagedit_text%生成handles.edit_text域存放静态文本句柄Unitsnormalized%采用相对度量单位,缩放时保持该区比例图形用户界面设计工具应用(续)在可编辑文本的属性编辑框中,设置如下属性值:Fontsize0.626%字体大小FontUnitsnormaliszed%采用相对度量单位,缩放时保持字体比例HorizontalAlignmentCenter%文字中心对齐String%在界面上显示为空白Tagzeta_edit%生成handles.zeta_edit域存放弹出式选单句柄Unitsnormalized%采用相对度量单位,缩放时保持该区比例图形用户界面设计工具应用(续)在上按键的属性编辑框中,设置如下属性值:Fontsize0.485%字体大小FontUnitsnormaliszed%采用相对度量单位,缩放时保持字体比例HorizontalAlignmentCenter%文字中心对齐StringGridon%在按键上显示GridonTagGridOn_push%生成handles.GridOn_push域存放该键句柄Unitsnormalized%采用相对度量单位,缩放时保持该键比例图形用户界面设计工具应用(续)在下按键的属性编辑框中,设置如下属性值:Fontsize0.485%字体大小FontUnitsnormaliszed%采用相对度量单位,缩放时保持字体比例HorizontalAlignmentCenter%文字中心对齐StringGridoff%在按键上显示GridoffTagGridOff_push%生成handles.GridOff_push域存放该键句柄Unitsnormalized%采用相对度量单位,缩放时保持该键比例
图形用户界面设计工具应用(续)3.精细调整控件的大小及其相对位置直接拖拉控件调整其大小;通过对象对齐工具将控件摆放整齐。4.创建菜单
点击“菜单编辑器”图标,引出空白菜单编辑对话窗,再点击该对话窗最左上方的“新菜单NewMenu”图标,在左侧空白窗口中,出现”Untitled1”图标;点击此图标则在右侧引出填写栏,在“lable”中填写Options;在“Tag”中填写options,于是左侧的”Untitled1”图标变成“Options”图标,表示此菜单已生成。图形用户界面设计工具应用(续)先点亮左侧的“Option”图标,再点击菜单编辑对话窗上的“新菜单项NewMenuItem”图标,就引出等待定义的菜单项;在右侧的“Label”中填写Boxon,在“Tag”中填写box_on。重复该小步操作,建立另一个菜单项Boxoff。注意:菜单编辑对话窗上的“Callback”不要填写,机器自动生成。图形用户界面设计工具应用(续)5.界面的激活和回调函数的生成
点击工作台上的”运行界面“的工具图标,会出现一个询问对话框,当按提示对以上的设计进行存储以后,就会引出2个界面:名为Myguil的(待激活的)图形用户界面;展示名为Myguil的(待填写回调指令的)M函数文件的文件编辑器界面。同时,在当前目录或给定目录上,由MATLAB自动生成了2个文件,即Myguil.fig和Myguil.m。图形用户界面设计工具应用(续)在Myguil.m文件中,填写回调指令:functionvarargout=zeta_edit_Callback(hObject,eventdata,handles,varargin)z=str2num(get(handles.zeta_edit,‘String’))%从编辑框中获取zeta数据t=0:0.1:15;%设置时间采样数组cla%clearcurrentaxisfork=1:length(z)y(:,k)=step(1,[1,2*z(k),1],t);%计算阶跃输出
line(t,y(:,k));%绘制曲线end7.3图形用户界面设计工具应用(续)Functionvarargout=GridOn_push_Callback(hObject,eventdata,handles,varargin)gridon%配合Gridon按键操作的指令functionvarargout=GridOff_push_Callback(hObject,eventdata,handles,varargin)gridoff%配合Gridoff按键操作的指令图形用户界面设计工具应用(续)functionvarargout=box_on_Callback(hObject,eventdata,handles,varargin)boxon%配合菜单Boxon的操作指令set(handles.box_on,‘enable’,‘off’)%使菜单项Boxon失能set(handles.box_off,‘enable’,‘on’)%使菜单项Boxoff使能
图形用户界面设计工具应用(续)functionvarargout=box_off_Callback(hObject,eventdata,handles,varargin)boxoff%配合菜单Boxoff的操作指令set(handles.box_off,‘enable’,‘off’)%使菜单项Boxoff失能
set(handles.box_on,‘enable’,‘on’)%使菜单项Boxon使能图形用户界面设计工具应用(续)注意:在填写回调函数时,只有带%---标记的那些行指令是用户为满足设计要求而填写的,其余指令都是机器自动生成的,用户不必也不能更改6.图形用户界面的使用经过以上几个步骤生成的图形用户界面已经可以使用了,只要Myguil.m和Myguil.fig在当前目录或在MATLAB搜索路径上,那么在指令窗运行Myguil就能使用该界面。生成的界面如下图所示:
图形用户界面设计工具应用(续)
图形用户界面设计工具应用(续)例7.2设计一个GUI,实现计算器的功能步骤一:界面功能分析该计算器能完成数字的四则运算及部分常用的科学计算,如sin,cos,log等。步骤二:绘界面草图可有多种风格的界面。
图形用户界面设计工具应用(续)草图一:数值显示区(参加计算的数值及计算结果)数字按钮(0~9十个数字及小数点)代表+,-,*,/及sin,cos,log,log10运算的按钮开始计算及清零按钮图形用户界面设计工具应用(续)草图二:计算式第一个数字的编辑显示计算式两个数字间的计算关系计算式第二个数字的编辑显示计算结果显示区代表+,-,*,/及and,or,xor,y^x等运算的按钮开始计算及清零按钮图形用户界面设计工具应用(续)草图三:表达式编辑显示区(格式和MATLAB命令相同)计算结果显示区开始计算及清零按钮图形用户界面设计工具应用(续)步骤三:设计界面(选择草图一)初步布局打开GUI工作台,通过用鼠标拖拉“工作区”右下角的“小黑块”使工作区的大小合适,然后根据草图从控件选择区选择相应的控件拖拉到工作区的相应位置。效果图如下页所示:图形用户界面设计工具应用(续)图形用户界面设计工具应用(续)2.修改控件属性1)双击设计工作区的空白部分,打开图形窗的属性框,设置属性如下:
MenuBarnone%图形窗不使用标准菜单
NameExperiment1%图形窗名称
Resizeoff%图形窗不能缩放
TagmainWnd
%生成handles.mainWnd域存放图形窗句柄图形用户界面设计工具应用(续)2)静态文本编辑框的属性设置。以”expression”文本框为例:
FontSize15%字体大小
Fontunitspoint%字体大小的度量单位
HorizontalAlignmentCenter%对齐方式
StringExpression%待显示的字符
Tagtext1
%生成handles.text1存放该静态文本框的句柄
Unitspoint%文本框度量单位
图形用户界面设计工具应用(续)3)可编辑文本框的属性设置
Sting0%初始状态下显示数字0
TagpExp%可编辑文本框的句柄
其它与静态文本框相同图形用户界面设计工具应用(续)注:
Units或FontUnits可选择:inches(英寸),centimeters(厘米),normalized(按比例缩放),points(点阵),pixels(像素),characters(字符)。如果选择normalized,那么当resize设为on时,控件或字体大小随着整个窗口的缩放而改变。
水平对齐方式
HorizontalAlignment可以是left,center,right。
控件句柄Tag有默认值,建议修改为带有具体含义的字符串,以增加程序可读性和方便回调函数调用。图形用户界面设计工具应用(续)4)单功能按钮属性设置。以按钮“1”为例:
String1Tagp1其它和静态文本框相同。图形用户界面设计工具应用(续)3.
创建菜单创建一个“操作”菜单,带两个下拉选单“计算”和“清零”。图形用户界面设计工具应用(续)步骤四:激活界面,填写回调函数保存静态界面后,利用工具栏上的运行界面按钮激活界面,同时,机器自动生成了exp1.fig和exp1.m两个文件。
打开exp1.m文件,可看到自动生成的回调函数,该函数的命名利用对象句柄进行区分,没有任何执行语句。图形用户界面设计工具应用(续)回调函数:Tag_Callback(hObject,eventdata,handles)
通过加入自己的处理语句,才可实现所需的功能。
其中,hObject是该控件的句柄;evendata是备用参数,目前没有定义;handles是用户数据,本身是一个构架数组,存放了当前窗口所有对象的句柄,包括图形窗本身、所有控件和菜单的句柄,并且可以增加一些域用来传递用户数据。
利用guidata(H,handles)可以更新H的用户数据。对本例来说,先需要定义几个用户变量,以便记录参加运算的数值,进行计算。图形用户界面设计工具应用(续)function
exp1_OpeningFcn(hObject,eventdata,handles,varargin) handles.output=hObject;
handles.s_Exp=‘’;
%以字符串的形式记录计算表达式
handles.s_Num=‘’;
%以字符串的形式记录编辑框中要显示的数值
handles.i=1; %s_Exp的计数器
handles.j=1; %s_Num的计数器
handles.flag=0;
%用来区分四则运算和函数运算的标志
%Updatehandlesstructure
guidata(hObject,handles);图形用户界面设计工具应用(续)数字按钮的回调函数,以数字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+1; guidata(handles.mainWnd,handles); set(handles.pExp,'string',handles.s_Num)图形用户界面设计工具应用(续)
四则运算的回调函数,以“+”为例
function
pAdd_Callback(hObject,eventdata,handles)
if
handles.flaghandles.s_Exp(handles.i)=')';handles.flag=0;handles.i=handles.i+1;
handles.j=handles.j+1;
endhandles.s_Exp(handles.i)='+';handles.s_Num(handles.j)='+';handles.i=handles.i+1;handles.j=handles.j+1;guidata(handles.mainWnd,handles);set(handles.pExp,'string',handles.s_Num)图形用户界面设计工具应用(续)其它运算的回调函数,以“sin”为例functionpSin_Callback(hObject,eventdata,handles)handles.s_Exp(handles.i:handles.i+3)='sin(';handles.flag=1;handles.s_Num='sin(';handles.i=handles.i+4;handles.j=handles.j+4;guidata(handles.mainWnd,handles);set(handles.pExp,'string',handles.s_Num)图形用户界面设计工具应用(续)Reset按钮的回调函数,和“清零”菜单的回调函数一样。function
pCle_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','')图形用户界面设计工具应用(续)Calculate按钮的回调函数,和“计算”菜单的回调函数一样。function
pDon_Callback(hObject,eventdata,handles)try
if
handles.flaghandles.s_Exp(handles.i)=')';handles.s_Num(handles.j)=')';handles.flag=0;handles.i=handles.i+1;handles.j=handles.j+1;endeval(['s=',handles.s_Exp,';']);
set(handles.pExp,'string',[handles.s_Num,'=',num2str(s)])catcherrordlg('Theinputdon''tfitthecalculation')endM函数文件实现图形用户界面(自学)h_control=uicontrol(h_Parent,'PropertyName',ProperValue,…)创建控件h_menu=uimenu(h_parent,'PropertyName',ProperValue,…)
其中,h_parent
为菜单父句柄,可以是图形窗或上一级菜单,PropertyName和ProperValue总是成对出现,设置菜单的一个属性M函数文件实现图形用户界面(续)现场菜单制作命令Hm=uicontextmenu;H=uimenu(Hm,'PropertyName',ProperValue,…)Set(H_parent,'uicontextmenu',Hm)其中,H_parent是与这个现场菜单相关联的对象的句柄,利用H=uimenu和Set(H)指令可以查看菜单的属性列表。控件对象的建立(自学)Matlab提供了用于建立控件对象的函数uicontrol,其调用格式为:
对象句柄=uicontrol(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…)其中各个属性名及可取的值和后面将介绍的uimenu函数相似,但也不尽相同。
在对话框上有各种各样的控件,利用这些控件可以实现有关控制。例1
建立数制转换对话框。在左边输入一个十进制整数和2~16之间的数,单击“转换”按钮能在右边得到十进制数所对应的2~16进制字符串,单击“退出”按钮退出对话框。程序如下:hf=figure('Color',[0,1,1],'Position',[100,200,400,200],...'Name','数制转换','NumberTitle','off','MenuBar','none');uicontrol(hf,'Style','Text','Units','normalized',...'Position',[0.05,0.8,0.45,0.1],'Horizontal','center',...'String','输入框','Back',[0,1,1]);uicontrol(hf,'Style','Text','Position',[0.5,0.8,0.45,0.1],...'Units','normalized','Horizontal','center',...'String','输出框','Back',[0,1,1]);uicontrol(hf,'Style','Frame','Position',[0.04,0.33,0.45,0.45],...'Units','normalized','Back',[1,1,0]);uicontrol(hf,'Style','Text','Position',[0.05,0.6,0.25,0.1],...'Units','normalized','Horizontal','center',...'String','十进制数','Back',[1,1,0]);uicontrol(hf,'Style','Text','Position',[0.05,0.4,0.25,0.1],...'Units','normalized','Horizontal','center',...'String','2~16进制','Back',[1,1,0]);he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.6,0.2,0.1],...'Units','normalized','Back',[0,1,0]);he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.4,0.2,0.1],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Frame','Position',[0.52,0.33,0.45,0.45],...'Units','normalized','Back',[1,1,0]);ht=uicontrol(hf,'Style','Text','Position',[0.6,0.5,0.3,0.1],...'Units','normalized','Horizontal','center','Back',[0,1,0]);COMM=['n=str2num(get(he1,''String''));','b=str2num(get(he2,''String''));',...'dec=trdec(n,b);','set(ht,''string'',dec);'];uicontrol(hf,'Style','Push','Position',[0.18,0.1,0.2,0.12],...'String','转换','Units','normalized','Call'M);uicontrol(hf,'Style','Push','Position',[0.65,0.1,0.2,0.12],...'String','退出','Units','normalized','Call','close(hf)');程序调用了trdec.m函数文件,该函数的作用是将任意十进制整数转换为2~16进制字符串。trdec.m函数文件如下:functiondec=trdec(n,b)ch1='ABCDEF';%十六进制的16个符号k=1;whilen~=0%不断除某进制基数取余直到商为0p(k)=rem(n,b);n=fix(n/b);k=k+1;endk=k-1;strdec='';whilek>=1%形成某进制数的字符串kb=p(k);strdec=strcat(strdec,ch1(kb+1:kb+1));k=k-1;enddec=strdec;所建立的数制转换对话框如下:例2
建立图形演示对话框。在编辑框输入绘图命令,单击“绘图”按钮能在左边坐标轴得到所对应的图形,弹出框提供色图控制,列表框提供坐标网格线和坐标边框控制。程序如下:clf;set(gcf,'Unit','normalized','Position',[0.2,0.3,0.65,0.35]);set(gcf,'Menubar','none','Name','图形演示','NumberTitle','off');axes('Position',[0.05,0.15,0.55,0.7]);uicontrol(gcf,'Style','text','Unit','normalized',...'Posi',[0.63,0.85,0.2,0.1],'String','输入绘图命令','Horizontal','center');hedit=uicontrol(gcf,'Style','edit','Unit','normalized','Posi',[0.63,0.15,0.2,0.68],...'Max',2);%Max取2,使Max-Min>1,从而允许多行输入
hpopup=uicontrol(gcf,'Style','popup','Unit','normalized',...'Posi',[0.85,0.8,0.15,0.15],'String','Spring|Summer|Autumn|Winter');hlist=uicontrol(gcf,'Style','list','Unit','normalized',...'Posi',[0.85,0.55,0.15,0.25],'String','Gridon|Gridoff|Boxon|Boxoff');hpush1=uicontrol(gcf,'Style','push','Unit','normalized',...'Posi',[0.85,0.35,0.15,0.15],'String','绘图');uicontrol(gcf,'Style','push','Unit','normalized',...'Posi',[0.85,0.15,0.15,0.15],'String','关闭','Call','closeall');set(hpush1,'Call','COMM(hedit,hpopup,hlist)');set(hlist,'Call','COMM(hedit,hpopup,hlist)');set(hpopup,'Call','COMM(hedit,hpopup,hlist)');
程序调用了COMM.m函数文件,
该函数文件如下:functionCOMM(hedit,hpopup,hlist)com=get(hedit,'String');n1=get(hpopup,'Value');n2=get(hlist,'Value');if~isempty(com)%编辑框输入非空时
eval(com');%执行从编辑框输入的命令
chpop={'spring','summer','autumn','winter'};chlist={'gridon','gridoff','boxon','boxoff'};colormap(eval(chpop{n1}));eval(chlist{n2});end所建立的图形演示对话框如右图所示:菜单设计(利用函数建立)(自学)1.建立用户菜单Hm=uimenu(Hp,属性名1,属性值1,属性名2,属性值2,…)功能:创建句柄值为Hm的自定义的用户菜单。其中Hp为其父对象的句柄,属性名和属性值构成属性二元对,定义用户菜单的属性。建立自定义的用户菜单的函数为uimenu,格式为:
子菜单项句柄=uimenu(一级菜单项句柄,属性名1,属性值1,属性名2,属性值2,…)
因其调用方法不同,该函数可以用于建立一级菜单项和子菜单项。建立一级菜单项的函数调用格式为:一级菜单项句柄=uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…)建立子菜单项的函数调用格式为:2.菜单对象常用属性
菜单对象除具有Children(子对象),Parent(父对象),Tag(标签),Type(类型),UserData(用户数据),Enable(使能)和Visible(可见性)等公共属性,还有一些常用的特殊属性,如回调(callback)属性和菜单名(label)。另外,用户菜单的外观有四个属性:Position(位置),Separator(分隔线),checked(检录符)和ForeGroundColor(前景颜色)。Tag属性Tag属性的取值是字符串,它定义了该菜单对象的一个标识值。定义了Tag属性后,在任何程序中都可以通过这个标识值找出该菜单对象。Type属性Type属性的取值总是uimenu,这个属性值标明图形对象的类型。对菜单对象,其类型就是uimenu,用户不能改写这个属性。例3建立“图形演示系统”菜单。菜单条中含有3个菜单项:Plot、Option和Quit。Plot中有SineWave和CosineWave两个子菜单项,分别控制在本图形窗口画出正弦和余弦曲线。Option菜单项的内容为:Gridon和Gridoff控制给坐标轴加网格线,Boxon和Boxoff控制给坐标轴加边框,而且这4项只有在画有曲线时才是可选的。FigureColor控制图形窗口背景颜色。Quit控制是否退出系统。程序如下:UserData属性UserData属性的取值是一个矩阵,缺省值为空矩阵,用户可以在这个属性中保存与该菜单对象相关的重要数据或信息,借此可以达到传递数据或信息的目的。可以用set和get函数访问该属性。screen=get(0,'ScreenSize');W=screen(3);H=screen(4);figure('Color',[1,1,1],'Position',[0.2*H,0.2*H,0.6*W,0.4*H],...'Name','图形演示系统','NumberTitle','off','MenuBar','none');%定义Plot菜单项hplot=uimenu(gcf,'Label','&Plot');uimenu(hplot,'Label','SineWave','Call',['t=-pi:pi/20:pi;','plot(t,sin(t));',...'set(hgon,''Enable'',''on'');','set(hgoff,''Enable'',''on'');',...'set(hbon,''Enable'',''on'');','set(hboff,''Enable'',''on'');']);uimenu(hplot,'Label','CosineWave','Call',['t=-pi:pi/20:pi;','plot(t,cos(t));',...'set(hgon,''Enable'',''on'');','set(hgoff,''Enable'',''on'');',...'set(hbon,''Enable'',''on'');','set(hboff,''Enable'',''on'');']);%定义Option菜单项
hoption=uimenu(gcf,'Label','&Option');hgon=uimenu(hoption,'Label','&Grigon','Call','gridon','Enable','off');hgoff=uimenu(hoption,'Label','&Grigoff','Call','gridoff','Enable','off');hbon=uimenu(hoption,'Label','&Boxon','separator','on','Call','boxon','Enable','off');hboff=uimenu(hoption,'Label','&Boxoff','Call','boxoff','Enable','off');hfigcor=uimenu(hoption,'Label','&FigureColor','Separator','on');uimenu(hfigcor,'Label','&Red','Accelerator','r','Call','set(gcf,''Color'',''r'');');uimenu(hfigcor,'Label','&Blue','Accelerator','b','Call','set(gcf,''Color'',''b'');');uimenu(hfigcor,'Label','&Yellow','Call','set(gcf,''Color'',''y'');');uimenu(hfigcor,'Label','&White','Call','set(gcf,''Color'',''w'');');%定义Quit菜单项
uimenu(gcf,'Label','&Quit','Call','close(gcf)');所建立的“图形演示系统”菜单如下:
菜单条中含有File和Help两个菜单项。如果选择File中的New选项,则将显示NewItem字样,如果选择File中的Open选项,则将显示出OpenItem字样。File中的Save菜单项初始时处于禁选状态,在选择Help选项之后将此菜单项恢复成可选状态,如果选择File中的Save选项,则将出现一个新的菜单(三级菜单),其中共有两个子菜单项Textfile和Graphicsfile,如果选择第1项,则将变量k1和k2分别赋为0和1,然后调用file01.m文件来进行相应的处理(该文件需要另行编写),如果选择第2项,则将变量k1和k2分别赋为1和0,然后调用file10.m文件来进行相应的处理(该文件也需要另行编写)。如果选择File中的SaveAs选项,则将显示SaveAsItem字样。如果选择File中的Exit选项,则将关闭当前窗口。如果选择Help中About…选项,则将显示HelpItem字样,并将Save菜单设置成可选状态。例4
建立一个菜单系统。程序如下:screen=get(0,'ScreenSize');W=screen(3);H=screen(4);hf=figure('Color',[1,1,1],'Position',[1,1,0.4*W,0.3*H],...'Name','菜单设计示例一','NumberTitle','off','MenuBar','none');hfile=uimenu(hf,'label','&File');hhelp=uimenu(hf,'label','&H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年餐饮配送行业食品安全责任合同3篇
- 二零二五版综合安全解决方案与保安劳务合同2篇
- 二零二五版搬家服务与物流数据共享合同样本3篇
- 二零二五版房地产代理销售合同示范文本解读3篇
- 二零二五年度水上乐园供水及排水系统承包合同2篇
- 二零二五版影视制作合同:规定电影制作的流程与投资分配3篇
- 二零二五年度食堂物流配送服务合同2篇
- 二零二五年特种车辆销售与操作培训服务合同3篇
- 二零二五版体育场馆承包经营合同模板2篇
- 二零二五版宝钢职工社会保障配套合同3篇
- 2024年水利工程高级工程师理论考试题库(浓缩400题)
- 淋巴瘤病理诊断基础和进展周小鸽
- 增强现实技术在艺术教育中的应用
- TD/T 1060-2021 自然资源分等定级通则(正式版)
- 《创伤失血性休克中国急诊专家共识(2023)》解读
- 仓库智能化建设方案
- 海外市场开拓计划
- 供应链组织架构与职能设置
- 幼儿数学益智图形连线题100题(含完整答案)
- 七上-动点、动角问题12道好题-解析
- 2024年九省联考新高考 数学试卷(含答案解析)
评论
0/150
提交评论