学习matlab(十四)——GUI

本文详细介绍了MATLAB中的图形句柄、用户接口对象(如uicontrol和uimenu)、以及常用对话框(如msgbox和inputdlg)的使用方法和属性设置。此外,指南还覆盖了GUI开发工具GUIDE的控件、属性和M文件生成等内容。
摘要由CSDN通过智能技术生成

1.编程方法

在本章首先详细的介绍了MATLAB的图形句柄,通过对图形对象的属性进行设置,可以是实现图形的底层控制和设置。然后介绍了用户接口对象,用于建立各种按钮、菜单和工具条等。最后介绍了常用的对话框,这些对话框是GUI编程常用的基本元件。

在MATLAB中,各种句柄图形对象是有层次的,按照父对象(Parent)和子对象(Children)的形式进行管理。当子对象创建时,继承了父对象的许多属性。

MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。计算机屏幕作为根对象( root)由系统自动建立,其句柄值为0,而图形窗口对象( figure)的句柄值为一正整数,并显示在该窗口的标题栏。其他图形对象的句柄为浮点数。MATLAB在创建各种对象时,会产生该对象的句柄,通过句柄可是实现对该对象的各种控制和设置。MATLAB提供了若千个函数用于获取已有图形对象的句柄。

图形对象的属性是一些特殊值,可以对图形对象进行控制和设置。每个属性都有一个属性名和属性值。属性名通常是采用大小写字母组成的字符串,第一个字母大写。用户可以在创建图形对象时,可以对属性值进行设置。如果用户没有对属性值进行设置,则所有的属性都会自动初始化为系统的默认值。例如:figure('Toolbar','none',' Menubar",'none'),将创建没有工具栏和菜单的图形窗口。图形对象的属性非常多,通常在创建图形对象后,通过句柄对属性值进行修改。利用函数get()状取图形对家出属性值,通过函数set()设置图形对象的属性值。图形对象的属性设置,将会在下一节详细介绍。

除根对象外,每一种图形对象都有一个相对应的创建函数在MATLAB中,图形对象的创建函数,如下表所示。例如,采用函数figure( )创建figure对象,函数axes( )创建坐标轴对象。

函数说明函数说明
root根对象figure窗口对象
axes坐标轴image图像
light灯光line线条
patchrectangle矩形
surface曲面text文本

在MATLAB中,利用函数get()来获取对象的属性值。该函数的调用格式为:v=get(h, 'PropertyName'):该函数获取句柄h的指定的属性值。v=get(0, 'Factory"'):该函数获取根对象( root)的所有出厂属性值v=get(h, 'default'):该函数获取句柄h的所有默认属性值。

v=get(h, 'default'):该函数获取句柄h的所有默认属性值。调用格式为:set(h, 'PropertyName',PropertyValue):该函数设置对象h的属性PropertyName的值为PropertyValue.set(h, 'PropertyName1', PropertyValue1,'PropertyName2',PropertyValue2,...):该函数同时对h的多个属性值进行设置。A=set(h,'PropertyName')或se(h,'PropertyName'):该函数获取对象h的属性PropertyName的可设置值。A=set(h)或se(h):该函数获取对象h的所有可设置的属性值。

在MATLAB中,有一些特殊的函数可以获取当前的图形对象、坐标轴对象的句柄值,这些函数如下表所示。利用这些函数可以非常方便的获取句柄值。

函数说明
gcf获取当前图形窗口的句柄
gca获取当前图形窗口中的坐标轴的句柄
gco获取当前图形窗口中当前对象的句柄
gcbf获取正在执行的回调程序对应的对象所在窗口的句柄
gcbo获取正在执行的回调程序对应的对象句柄

在MATLAB中,除了可以采用函数get( )和set()获取和设置对象的属性,还可以对图形对象进行一切其他的操作,例如利用函数findobj()进行对象的查找等。对象的基本操作,如下表所示。下面分别进行介绍:

函数说明
reset对象的复位,恢复为默认值
findobj对象的查找
findall查找所有的对象,包括隐藏的对象
copyobj对象的复制
delete对象的删除
allchild查找所有子对象
ancestor查找所有父对象

在MATLAB中,根对象( root)相当于计算机的屏幕。只有一个根对象,是figure对象的父对象。根对象的句柄值为0,没有父对象。根对象不需要创建,在MATLAB软件启动后自动创建。根对象也不能删除,在退出MATLAB软件后,自动删除。用户可以通过get(0)获取根对象的所有属性。

图形窗口也称为figure对象。图形窗口的句柄值为正整数。在MATLAB中,采用函数figure( )来创建图形窗口。在MATLAB中,利用函数figure(h)创建句柄为h的图形窗口后,可以采用get(h)获取该图形句柄的所有属性值。采用函数clf清空当前图形窗口。该函数的调用格式为:clf:该函数清除当前figure中的所有不隐藏的对象clf('reset'):该函数清除当前figure的所有对象,并对figure的属性复位为系统的默认值。clf(fig):该函数清除窗口fig中所有不隐藏的对象。clf(fig, 'reset'):该函数清除窗口fig中所有不隐藏的对象,并复位为系统的默认值。

在MATLAB中,采用函数axes()创建坐标轴对象,该函数的调用格式为:axes:该函数在当前的figure内创建坐杯轴对象,采用系统的默认值。axes('position',RECT):该函数设置坐标轴的位置为RECT,RECT为4维向量,指定坐标轴的尺寸和位置格式为:[left,bottom, width, height],即[左,底,宽,高],以屏幕的左下角为原点。axes(h):当句柄为h的坐标轴对象存在时,将其设置为当前对象。如果句柄为h的坐标轴对象不存在,则创建句柄为h的坐标轴对象,并设置为当前的对象。h=axes(...:该函数返回坐标轴对象的句柄h。

在MATLAB中,利用函数image()创建图像对象,该函数的低级调用格式为:h=image('P1Nae',P1Value,'P2Name',P2Value, ...). imge对象的主要属性为CData和Visible。CData属性保存了image的图像数据,Visible属性设置图像是否显示。

在MATLAB中,用户接口对象((User Interface Objects),主要包括uicontrol对象、uimenu对象、uicontextmenu对象、uitoolbar对象和uitable对象等。下面分别进行介绍。

利用函数uicontrol()建立按钮,单击该按钮后,清除figure中的图形。

利用函数uimenu()创建菜单,并设置快捷键,在MATLAB中,利用函数uicontextmenu()创建右键快捷菜单,该函数的调用格式为:uicontextmenu('P1Name',P1Value, ..):该函数对右键快捷菜单的属性进行设置。h=uicontextmenu(...:该函数返回右键快捷菜单的句柄h.

在MATLAB中,利用函数uitoolbar( )为图形对象创建工具栏,利用函数uipushtool()和uitoggletool()为工具栏创建按钮。uitoolbar对象是uipushtool对象和uitoggletool对。函数uitoolbar( )的调用格式为:uitoolbar('P1Name', P1Value, ...):该函数设置工具栏的属性。uitoolbar(h,...):该函数为句柄为h的图形对象设置工具栏.

MATLAB中,利用函数uibuttongroup()创建按钮组函数的调用格式为:uibuttongroup('P1Name',P1Value,..):该函数对按钮组的属性进行设置。h=uibuttongroup(..):该函数返回按钮组的句柄h.如果h为按钮组的句柄,通过函数get(h)可以获取按钮组的所有属性值。利用函数uibuttongroup( )创建了按钮组后,可以在按钮组中添加各种类型的按钮,并设置按钮的父对象为按钮组。

在MALAB中,可以采用函数uipanel()创建面板,该函数的调用格式为:uipanel('P1Name',P1Value, ...):该函数对面板的属性进行设置。h=uipanel(...):该函数返回面板的句柄为h.如果h为面板的句柄,则通过函数get(h)可以获取面板的所有属性值。利用函数uipanel()创建面板后,用户可以在面板中添加按钮或文本等。

在MATLAB中,利用函数uitable()创建表格对象,该函数的调用格式为:uitable('P1Name',P1Value,...):利用函数uitalble创建表格对象,并对属性进行设置。h=uitalble(...):该函数返回表格对象的句柄为h.

在MATLAB中,有很多的预定义对话框,进行用户和计算机之间的交互。在进行GUI编程时,经常会用到这些预定义对话框,使用也非常的简单和方便。MATLAB中的预定义对话框如下表所示。下面分别进行介绍。

函数说明函数说明
dialog创建对话框msgbox信息显示对话框
errordlg错误对话框uiload加载数据文件的标准图形画面
wamdlg警告对话框uisave保存数据文件的标准图形画面
helpdlg帮助对话框uigetdir选取目录的标准图形画面
inputdlg输入对话框uigetfile选取文件的标准图形画面
listdlg列表对话框uiputfile保存文件的标准图形画面
printdlg打印对话框uisetcolor设置色彩的标准图形画面
pagesetupdlg页面设置对话框uisetfont设置字体的标准图形画面
questdlg询问对话框waitbar显示包含进度条的对话框

在MATLAB中,利用函数msgbox(}建立消息对话框。它不接受用户的任何输入,在用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。该函数的调用格式为:msgbox(' Message'):该函数建立消息对话框,消息的内容为Message.msgbox('Message','Title'):该函数建立消息对话框的标题为Title.msgbox('Message', 'Title','Icon'):该函数建立消息对话框的lcon,lcon可以为none、error、,help、 warn或custom等,系统默认为none.msgbox('Message', 'Title', 'custom', lconData, IconMap):该函数中利用IconData和IconMap建立Icon.h=msgbox(...):该函数返回消息对话框的句柄。

在MATLAB中,利用函数errordlg()建立错误对话框。它不接受用户的任何输入,在用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。该函数的调用格式为:errordlg:建立默认的错误对话框。errordlg('Errorstring'):该函数建立错误对话框的内容为Errorstring.errordlg('Errorstring','Dialogname'):该函数建立错误对称为为Diaglogname。h=errordlg(...):该函数返回错误对话框的句柄。

在MATLAB中,采用函数warndlg()建立警告对话框,该函数的调用格式和errordlg()基本相同。用户可以在MATLAB的命令行窗口输入:help warndlg进行查询。warndlg;warndlg(警告信息! ,'警告');

在MATLAB中,采用函数helpdlg()建立帮助对话框。该函数的调用格式和errordlg()基本相同。用户可以在MATLAB的命令行窗口输入:help helpdlg进行查询

在MATLAB中,利用函数inputdlg( )建立输入对话框。该函数接受用户的输入,然后将输入值进行返回。answer=inputdlg(f'UserName:,'Password:"},'log in');带有默认值的输入对话框:

在MATLAB中,利用函数listdlg(建立列表对话框,该函数的调用格式为:[Selection, ok]=listdlg('P1Name','P1Value'):该函数设置列表框的属性,用户单击按钮Ok后,选择的序号保存在Selection,参数ok为1.利用函数listdlg( )创建列表对话框:

在MATLAB中,利用函数questdlg()建立问题对话框,然后等待用户回答。默认情况下,回答按钮有3个,分别是Yes、No和Cancel.choice=questdlg('你确定要关闭吗?'.... %问题对话框。

在MATLAB中,利用函数waitbar()创建进度条对话框,反映程序运行的完成情况。该函数的调用格式为:waitbar(x):创建进度条,x介于[0 1]之间,如果x=0表示进度条开始,x=1时进度完成。h=waitbar(x, 'message'):创建标题为message的进度条,返回值h为进度条的句柄。h=waitbar(x, 'message','P1Name',P1Value,..):对进度条的属性进行设置。waitbar(x, h):更新句柄为h的进度条的进度x。waitbar(x, h,'updated message'):更新句柄为h的进度条的进度和标题。

在MATALB中,采用函数uigetdir()建立路径选择对话框,返回目录名称字符串。folder_name=uigetdir:该函数创建目录选择对话框。如果用户单击OK按钮,返回路径字符串,如果用户单击Cancel按钮,返回值为0。folder_name=uigetdir('start_pat):该函数中起始目录为start_path.folder_name=uigetdir('start_path', 'dialog_title'):该函数中起始目录为start_path,对话框的标题为dialog_titlea,建立默认的路径选择对话框,代码如下:dname=uigetdir;

在MATLAB中,采用函数uigetfile()建立文件打开对话框,用户通过该对话框来选择要打开的文件。该函数返回用户选择的路径和文件名,然后可以进行数据的读取和写入等操作。Filename=uigetfile:该函数建立默认的文件打开对话框,默认为当前的目录,文件类型为所有的MATLAB文件:返回所选择的文件名。[Filename, Pathname]=uigetfile(FilterSpec):该函数通过FilterSpec指定扩展名,返回选择的文件名和路径。FilterSpec为字符串或字符串单元数组,用于文件名的过滤。如果FilterSpec为*.m,则在对话框中只列出后缀为.m的文件。[Filename, Pathname]=uigetfile(FilterSpec, DialogTitle),该函数设置对话框的标题为DialogTitle.

在MATLAB中,采用函数uiputfile()建立文件保存对话框,在MATLAB中,采用函数uiputfile()建立文件保存对话框,Filename=uiput胜类型为所有的MATLAB文件,默认为当前的目录,文件类型为所有的MATLAB文件,保存对话框,返回保存的文件名和路径.[Filename, Pathname]=uiputfile(FilterSpec):该函数通过FilterSpec指定文件的扩展名。FilterSpec为字符串或字符串单元数组,用于文件名的过滤。[Filename, Pathname]=uiputfile(FilterSpec, DialogTitle),该函数设置对话框的标题为DialogTitle。

在MATLAB中,采用函数pagesetupdlg()建立页面设置对话框,该函数的调用格式为dlg=pagesetupdlg(fig),其中fig为图形窗口句柄。该函数只支持单一图形窗口的页面设置,参数fig也必须是单一的图形句柄,不能是句柄向量。利用函数函数pagesetupdlg()建立页面设置对话框。

在MATLAB中,采用函数printpreview()建立打印预览对话框,该函数的调用格式为:printpreview:该函数建立当前窗口的打印预览对话框。如果没有图形窗口,则采用figure新建一个图形窗口。printpreview(f):该函数建立图形句柄为f的打印预览窗口。

在MATLAB中,可以采用函数printdlg( )函数建立打印对话框,用户可以对打印机和各种打印参数进行设置。利用函数printdlg()建立Window系统的打印对话框;

在MATLAB中,采用函数uisetcolor()建立颜色设置对话框,返回用户选择的颜色数据。该函数的调用格式为:c=uisetcolor:该函数建立默认的颜色设置对话框。如果用户单击OK按钮,返回值c为用户选择的颜色。如果用户单击Cancel按钮,返回值为0.c=uisetcolor([r g b]):该函数设置默认的颜色为[r g b].c=uisetcolor(...,'dialogTitle'):该函数设置对话框的标题为dialogTitle.利用函数uisetcolor()建立颜色设置对话框:

在MATALB中,采用函数uisetfont()创建字体设置对话框,用户可以设置或修改字体。该函数的调用格式为:uisetfont:该函数建立字体设置对话框。uisetfont(h):该函数对对象h的字体属性进行设置。nt(s):该函数创建字体设置对话框,初始字体为结构体s公uisetfont(.., 'DialogTitle'):该函数设置字体设置对话框的标题为DialogTitle.s=uisetfon(..):该函数将用户设置的字体保存在结构体s中。利用函数uisetfont()建立字体设置对话框,并对字体进行设置:

2.工具箱

MATLAB可视化界面的设计,一般有两种方法,一是直接通过编辑M脚本文件产生GU,这个方法在上一章已经进行详细的介绍。二是通过MATLAB图形用户界面开发环境GUIDE (Graphical User Interface DevelopmentEnvironment)来建立GUI界面。GUIDE是MATLAB为编写GU界面提供的集成开发工具。本章将对GUIDE进行详细的介绍,包括常用的控件、控件的属性、自动产生的M文件等。然后通过一些例子程序,讲解如何使用这些控件。最后给出了两个综合一些的例子,介绍了如何建立更加实用的GUI界面。MATLAB为图形用户界面开发提供了一个方便高效的集成开发环境,GUIDE.GUIDE是一个界面设计工具集,提供了界面的外观、属性和回调函数等。GUIDE将用户保存好的GUI界面保存在一个FIG资源文件中,同时还能够产生包含GUI初始化和组件界面布局控制代码的M文件。这个M文件为实现回调函数提供了一个参考框架。

用户可以在MATLAB的命令行窗口输入:guide来启动GUIDE。产生GUIDE的快速启动窗口,创建新的GUI时,有4个模版可以选择:Blank GUI (Default):系统默认为空白模版。GUl with Uicontrols:带有uicontrol对象的模版。GUl with Axes and Menu:带有坐标轴和菜单的模版。Modal Question Dialog:带有问答式对话框的模版。

利用属性查看器可以查看对象的属性值,也可以对属性值进行修改。用鼠标选中某个对象,然后单击工具栏的Property Inspector按钮或用鼠标双击该对象,则可以调用该对象的属性查看器。下面介绍一些常用的属性。

1.控件风格和外观

BackgroundColor:设置控件背景颜色,使用[RGB]或颜色定义。cData:在控件上显示的真彩色图像,使用矩阵表示。ForegroundColor:用于设置控件上显示的文本的颜色。String属性:设置控件上的文本,以及列表框和弹出菜单的选项等。Visible:设置控件是否可见,可以取值为on或off,默认值为on,即控件可见。当Visible属性设置为off时,控件不可见,但是控件仍然存在。

Enable属性:表示控件的使能状态,取值可以为on、inactive和off.默认值为on.设置为on时,该控件可用。设置为inavtive时,控件不可用,但是外表看起来昏为on时一样。设置为off时,表示控件不可用。Style:设置控件对象的类型,可以取值为pushbutton、togglebutton、radiobutton.checkbox、edit、text、slider、 frame、listbox.popupmenu,系统默认值为pushbutton.Tag:该属性为控件名称,利用该名称来命名控件的回调函数的名称。例如,对于pushbutton类型的按钮,GUIDE默认的Tag属性为ushbutton1,则回调函数为pushbutton1_Callback( ).TooltipString属性:该属性为字符串,用来设置提示信息。当鼠标指针位于此控件上时,显示该提示信息.UserData:设置用户指定的数据。利用该属性可以实现数据的传递.Position:该属性设置控件对象的位置和大小,向量为[xy width height].Units:设置控件的位置及大小等的单位,可以取值为pixels、normalized、 inches.points、centimeters和characters.

BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置ButtonDownFcn属性:按钮按下时的处理函数。CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。

CreateFcn:在对象产生过程中执行的回调函数。DeleteFcn:删除对象过程中执行的回调函数。Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。

DeleteFcn:删除对象过程中执行的回调函数,Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。

ListboxTop:在列表框中显示的最项层的字符串的索引Max:最大值。Min:最小值。Value:控件的当前值。对于单选按钮如果被选中时,该属性的值为Max属性值,如果没被选中,则为Min属性值。

利用GUIDE可以生成M文件框架,通过M文件决定GUI用户操作的响应。通过GUIDE可以自动生成M文件,然后在M文件中编写GUI控件的回调函数。M文件由多个子函数构成,包括主函数、Opening函数、Output函数和回调函数。其中,主函数不能修改,和文件名相同。

在GUI的各个控件之间进行数据传递,可以采用以下两种方法:利用结构体handles和控件的UserData属性。结构体handles保存了GUI的数据。当在运行GUI时,M文件会自动产生结构体handles,其中保存了所有GUI对象的数据,可以看作是一个数据的容器。用户可以在handles中找到所有控件的信息。handles在各个控件的callback之间传来传去。

利用GUIDE可以非常方便的建立GUI界面,同时建立了M文件框架。通过在M文件的回调函数中添加程序,可以非常快速的建立GUI界面。下面通过几个例子,介绍如何使用GUIDE提供的控件。

利用GUIDE设计GUI界面非常的方便、简单。在设计复杂的GUI界面时,需要很多的控件,例如菜单、按钮、坐标轴等。下面介绍几个综合一些的例子程序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值