第七章 GUIDE入门 7.1 概述 7.2 图形句柄入门 7.3 GUIDE工具入门 7.4 创建图形用户界面外观

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
项目2 字符格式和段落编排 2017年3月7日6时54分.
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
UI(用户界面)集训班 Illustrator 高级班.
在PHP和MYSQL中实现完美的中文显示
武汉纺织大学传媒学院 cm.wtu.edu.cn
第二讲 搭建Java Web开发环境 主讲人:孙娜
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
第7章 用户图形界面设计.
第7章 MATLAB图形用户界面设计 7.1 菜单设计 7.2 对话框设计 7.3 用户界面设计工具.
走进编程 程序的顺序结构(二).
辅导课程六.
第八讲 MATLAB图形用 户界面设计.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
Visual Studio 2010简捷入门.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
产品推广 PRODUCT PROMOTION PRESENTED BY OfficePLUS.
第11章 MATLAB图形用户界面设计 11.1 菜单设计 11.2 对话框设计 11.3 图形用户界面设计工具
直接扫描保存成TIF格式, 其他图片格式用Windows XP自带的 Windows图片与传真查看器打开
第四章 团队音乐会序幕: 团队协作平台的快速创建
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
VisComposer 2019/4/17.
VB与Access数据库的连接.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
第7章 MATLAB图形用户界面设计 7.1 菜单设计 7.2 对话框设计 7.3 用户界面设计工具.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
第11章 MATLAB图形用户界面设计 11.1 菜单设计 11.2 对话框设计 11.3 图形用户界面设计工具
VRP教程 2011.
Delphi 7.0开发示例.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Polarization of electro- magnetic wave after reflection
武汉纺织大学传媒学院 cm.wtu.edu.cn
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
YOUR SUBTITLE GOES HERE
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
培训课件 AB 变频器的接线、操作及参数的备份 设备动力科.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
Presentation transcript:

第七章 GUIDE入门 7.1 概述 7.2 图形句柄入门 7.3 GUIDE工具入门 7.4 创建图形用户界面外观 7.1 概述 7.2 图形句柄入门 7.3 GUIDE工具入门 7.4 创建图形用户界面外观 7.5 图形用户界面编程 7.6 常用的图形界面函数 7.7 本章小结

7.1 概 述 MATLAB作为一种科学计算软件,其基本的功能需要通过M语言编程来实现。那么通过图形用户界面的形式来发布应用程序的好处就是可以允许程序的使用者不具备很深厚的MATLAB知识或者数学知识,只要用户熟悉了解计算机的基本操作就可以完成相应的计算。MATLAB的图形用户界面同流行的操作系统——Windows、Unix或者Linux的图形界面类似,它使用这些平台上的统一外观作为自己的外观样式,它的图形用户界面应用程序可以做到一处编写到处运行,只要相应的平台上具有MATLAB即可。

在MATLAB中创建图形用户界面的方法有两种——图形句柄和GUIDE,这两种实现的方法都需要使用M语言编程,但是技术的侧重点不同。其实GUIDE创建图形用户界面的基础也是图形句柄对象,只不过是具有很好的封装,使用起来简便,而且还能够做到可视化的开发,对于一般的用户使用GUIDE创建图形用户界面应用程序已经足够了。MATLAB提供了基本的用户界面元素,包括菜单、快捷菜单、按钮、复选框、单选框、文本编辑框、静态文本、下拉列表框、列表框等。需要注意的是,MATLAB的图形用户界面程序大多数是对话框应用程序,利用MATLAB编写文档视图应用程序相对来说比较困难。

使用GUIDE和图形句柄创建的图形用户界面的主要区别在于,利用图形句柄创建的图形界面应用程序只有一个文件——M文件,而利用GUIDE创建的图形用户界面应用程序一般由两个文件组成,一个是应用程序文件——M文件,另一个是外观文件——fig文件。 MATLAB图形用户界面的例子非常多,不仅在MATLAB的Demos中有很多用户界面的例子,如图7-1所示,在MATLAB的工具箱中也有很多是利用GUIDE编写的小工具,不过早期的MATLAB工具多数都使用图形句柄进行开发。若MATLAB的图形用户界面功能不能够满足用户的需要,用户还可以利用Java语言的工程来扩充界面功能,不过使用Java语言来扩充MATLAB的功能属于MATLAB外部接口编程的内容,有兴趣的读者可以参阅MATLAB的帮助文档或者《MATLAB外部接口编程》一书。

图7-1 MATLAB图形用户界面示例

通过如图7-1所示的界面,用户可以不必过多了解内部细节就可以使用MATLAB的强大数据可视化和计算的功能了。例如,单击用户界面右边的按钮,可以在图形窗体的绘图区域绘制各种图形,同时在文本显示区域显示具体命令行代码,如图7-2所示。

图7-2 显示具体的算法以及图形

7.2 图形句柄入门 在第六章中介绍了很多MATLAB可视化函数,这些函数都是将不同的曲线或者曲面绘制在图形窗体中,而图形窗体也就是由若干图形对象组成的可视化的图形界面。在 MATLAB 环境中每一个图形对象都有一个相应的句柄,这些句柄帮助系统标识这些对象,获取或者设置它们的属性。理解图形对象句柄也是进行图形界面创建的前提之一,所以首先简要介绍图形对象句柄的概念,以及图形句柄的使用方法。

MATLAB的图形对象是按照一定的层次排列的,如图7-3所示。 图7-3 图形句柄的层次

在图7-3中,除了最上一层的屏幕(root)对象以外,每一种对象都具有自己的父层次对象,即对象的上一层次的对象,而自己下一层次的对象都被称为子对象。 具体来说,一个图形界面在Windows操作系统中的层次分布如图7-4所示。

图7-4 图形句柄的具体层次

在MATLAB中,只要获得了图形对象的句柄,就可以通过对属性的操作来修改图形对象的外观,这也是MATLAB图形用户界面编程的基本原理。MATLAB提供了若干函数用来对图形句柄进行操作,这其中较为常用的函数在表7-1中进行了总结。

表7-1 常用的图形句柄操作函数

例子7-1 使用图形句柄。 在MATLAB命令行窗口中,键入下面的指令: >> X = linspace(-pi,pi,25); >> Y = sin(X); >> plot(X,Y,'rX'); 这时的图形结果为红色的以“X”为符号的正弦曲线,如图7-5所示。

图7-5 绘制的原始图形

获取当前的曲线对象句柄: >> h_line = findobj(gca,'Marker','X') h_line = 3.0011 尽管这里h_line为一个双精度的数值,但这个数值变量具有特殊的意义,它代表了在当前坐标轴上绘制的曲线,可以通过这个变量来操作曲线对象,例如获取整个曲线的属性列表: >> get(h_line) Color = [1 0 0] EraseMode = normal

LineStyle = none LineWidth = [0.5] Marker = x MarkerSize = [6] MarkerEdgeColor = auto MarkerFaceColor = none XData = [ (1 by 25) double array] YData = [ (1 by 25) double array] ZData = []   BeingDeleted = off ButtonDownFcn = Children = []

Clipping = on CreateFcn = DeleteFcn = BusyAction = queue HandleVisibility = on HitTest = on Interruptible = on Parent = [101.001] Selected = off SelectionHighlight = on Tag = Type = line UIContextMenu = [] UserData = [] Visible = on

这里罗列了能够获取的图形对象的属性,现在获取具体的属性: >> h_line_parent = get(h_line,'Parent'); 上述命令行获得了曲线的父对象,即当前的坐标轴: >> isequal(h_line_parent,gca) ans = 1 设置曲线的属性: >> set(h_line,'Color',[1 1 1],'MarkerSize',10);

上述的命令行将曲线设置为白色,同时将符号的大小设置为10,不过这个时候的坐标轴也是白色,所以看不出曲线。 设置坐标轴的属性: >> set(gca,'Color',[0,0,0]) 这时坐标轴的背景色成为黑色,曲线的符号为白色,所以曲线可以被看到了。 >> set(gca,'XGrid','on','GridLineStyle','-.','XColor',[0.75 0.75 0]) >> set(gca,'YGrid','on','GridLineStyle','-.','YColor',[0 0.75 0.75])

上述的两条指令将坐标轴的网格线绘制了出来,而且使用了点划线,分别设置了不同的颜色。 >> set(gcf,'Color',[0 0 1]) 这条指令将整个图形窗体的背景色设置为蓝色,这样,所有的指令综合在一起得到的效果如图7-6所示。

图7-6 设置不同图形对象属性得到的结果

在MATLAB中,不同图形对象有不同的属性,由于受篇幅的限制,这里就不一一列举了,有兴趣的读者请参阅MATLAB的帮助文档。 从例子7-1中可以看出MATLAB图形界面应用的基本过程,无论是利用GUIDE还是图形句柄来创建图形用户界面,其基本过程都是首先获取当前的图形对象句柄,然后利用get函数获取一些属性——获取动作,再通过set函数设置一些属性——完成响应。 除了能够直接设置具体图形对象的属性以外,MATLAB还允许用户对图形对象的默认属性进行修改。所谓图形对象的默认属性,就是那些MATLAB图形对象所固有的预定义的“出厂设置”,例如在默认的条件下图形窗体的背景色为深灰色,而坐标轴的背景色为白色等,在没有指定特殊的属性值之前,MATLAB就使用这些默认的图形对象属性来显示图形对象。

若需要修改MATLAB的默认属性,则使用下面的命令行: set(ancestor,'Default<Object><Property>',<Property_Val>) 其中,ancestor为某一层次的图形对象句柄,若该句柄距离根对象越近,则影响的对象就越多,也就是说,若在根层次设置了默认属性,则所有的对象都继承这个默认属性,若在轴层次设置默认属性,则轴层次以下的对象继承该默认属性。下面举例说明设置对象默认属性的方法。

例子7-2 设置修改对象的默认属性。 本例子使用的脚本文件内容如下: 001 % 修改图形窗体默认背景色 002 set(0,'DefaultFigureColor',[1 1 1]); 003 % 修改默认的坐标轴背景色 004 set(0,'DefaultAxesColor',[0 0 0]); 005 % 修改坐标线的色彩 006 set(0,'DefaultAxesXColor',[0.5 0 0]); 007 set(0,'DefaultAxesYColor',[0.5 0 0]); 008 % 修改文本的色彩

009 set(0,'DefaultTextColor',[0 0.5 0]); 010 X = linspace(-pi,pi,25); 011 Y = sin(X); 012 plot(X,Y,'yX'); 013 grid on 014 title('Change The Default Properties'); 015 legend('sin'); 运行例子7-2的脚本文件,将修改部分对象的默认属性值,所以得到的图形结果如图7-7所示。

图7-7 修改默认属性值后的显示效果

修改的默认属性在本次MATLAB会话期间都有效,若关闭了MATLAB再次启动之后,则这些默认的属性就会恢复“出厂设置”,所以,若希望设置的默认属性在每次启动MATLAB时都发挥作用,则需要在startup.m文件中添加修改默认设置的指令。注意例子7-2的代码,这里首先修改了默认属性值,然后再来进行图形的绘制。

提示: 如果希望将已经修改的默认属性值恢复成出厂设置,则可以使用下面的命令行: >> set(h, 'PropertyName', 'default') 或者 >> set(h, 'PropertyName', 'factory') >> set(h, 'PropertyName', 'remove')

7.3 GUIDE工具入门 在MATLAB中创建图形用户界面有两种方法,其中之一是使用图形句柄,用这种方法创建图形界面的过程相当繁琐,而且在程序编写好之前,用户图形界面是不可见的。所以为了便于创建图形用户界面,MATLAB提供了一个开发环境,能够帮助用户创建图形用户界面,这就是GUIDE——Graphic User Interface Development Environment。 在MATLAB中启动GUIDE的方法是在MATLAB命令行中键入指令: >>guide 或者通过“Start”菜单选择“MATLAB”下的“GUIDE”命令。

这时在MATLAB 6.5中,将直接启动GUIDE Quick Start窗体,在这个窗体中,可以初步选择图形用户界面的类型,如图7-8所示。

在快速启动界面中,可以选择四种类型的新建界面: * 空白界面(Black GUI)。 * 具有图形控件的界面(GUI With Uicontrols)。 * 具有菜单和坐标轴的界面(GUI With Axes and Menu)。 * 模式对话框(Modal Question Dialog)。

其中,空白界面同早期版本的GUIDE图形用户界面一致。用户可以根据自己的需要选择不同的初始界面类型,以加快自己的开发任务。在本书中,仅讨论通过空白界面创建图形用户界面的方法,而其他的界面类型请参阅MATLAB的帮助文档。 除了能够创建新建的图形界面之外,还可以选择已经存在的图形界面文件,该文件的扩展名为fig,是MATLAB自己的图形文件格式。也可以通过下面的命令行直接打开一个存在的GUI界面文件: >> guide gui_filename 这时在GUIDE中将显示已经创建好的图形界面外观。

在本章中,选择空白界面类型,并单击“OK”按钮,这时MATLAB将启动GUIDE的图形界面,如图7-9所示。

在GUIDE界面中,位于中央的深灰色部分为绘制控件的画布,用户可以调整画布的尺寸以得到不同的界面尺寸。 在GUIDE界面的左侧为MATLAB的控件面板,控件面板包含了能够在画布上绘制的图形控件,其中分别为推按钮(Push Button)、单选按钮(Toggle Button)、单选框(Radio Button)、复选框(Checkbox)、文本框(Edit Text)、静态文本框(Static Text)、滚动条(Slider)、组别框(Frame)、列表框(Listbox)、下拉框(Popup Menu)和坐标轴(Axes)。创建GUIDE的过程之一,就是从控件面板中选择需要的控件,然后用鼠标在画布上绘制合适大小的控件。控件面板的外观可以通过设置GUIDE的属性进行简要的修改,选择GUIDE中“File”菜单下的“Reference”命令,在弹出的对话框中选择“Show names in Component palette”复选框,如图7-10所示。

图7-10 GUIDE的属性对话框

单击“OK”按钮之后,控件面板中在不同的控件旁边会显示相应控件的名称,如图7-11所示。 大家可以根据自己的喜好选择控件栏上的显示样式。 此外,在GUIDE的界面的工具栏上包含了一些常用的工具,如图7-12所示。

图7-11 显示不同控件的名称

图7-12 GUIDE工具栏上的工具按钮

这些常用的工具可以帮助用户提高创建图形用户界面应用程序的效率,具体工具的使用方法将在本章中逐步介绍。 利用在本小节介绍的GUIDE工具就可以来创建图形用户界面了。在后面的两个小节中,将结合具体的实例来介绍创建图形用户界面的一般方法和过程,在这里首先给出图形用户界面的结果,如图7-13所示。

图7-13 图形用户界面的例子

在该图形用户界面中包含如下控件: * 两个推按钮(push button),分别完成绘制三维曲面和改变色彩的功能; * 五个静态文本框(static text),分别用来完成显示不同信息的功能; * 一个滚动条(slide),用来完成改变三维曲面上的分隔线色彩; * 一个坐标轴(axes),用来显示三维曲面; * 一个菜单(menu),用来完成清除坐标轴的功能。 在后面两个小节中,将详细介绍创建该图形用户界面的方法和步骤。

7.4 创建图形用户界面外观 在本章需要实现的图形用户界面中,需要包含一个坐标轴用来显示三维表面(surface),而且界面中还需要包含两个按钮,分别用来在坐标轴中绘制三维表面和修改三维表面的颜色。在修改颜色时,需要通过几个文本框将颜色数值显示出来。通过滚动条可以修改三维表面的网格线色彩。最后,在图形界面上还有一个菜单,通过菜单命令可以清除当前坐标轴的内容。那么创建这样一个图形用户界面大体的步骤是怎样的呢?

首先,进行界面设计。在这一过程中,需要对界面空间的布局、控件的大小等进行设计,最好的方法就是在一张纸上简要地绘制一下界面的外观,做到心中有数。 然后,利用GUIDE的外观编辑功能,将必要的控件依次绘制在界面的“画布”上。在这一过程中,主要将所有控件摆放在合适的位置,并且设置控件合适的大小。 第三步,设置控件的属性,这一步骤重点需要设置控件重要的属性值,例如控件的回调函数、标签和显示的文本等。

第四步,也就是最后一步,就是针对不同的控件需要完成的功能进行M语言编程。 在进行了简单界面设计之后,就要创建具体的图形用户界面外观了。首先通过GUIDE的快速启动界面打开一个具有空白窗体的GUIDE界面。然后选择界面中“Tools”菜单下的“GUI Options”命令,打开GUI选项设置对话框。在这个对话框中,将首先设置图形界面的一些行为,例如,在创建用户界面外观的阶段,选择“Generate Fig File Only”单选框,这样,创建的用户界面仅创建外观图形文件,而不会创建相应的M文件,便于在创建图形用户界面外观的阶段检查创建的效果,如图7-14所示。

图7-14 设置界面应用程序的属性

图7-15 设置网格尺寸

单击“OK”按钮之后再次选择“Tools”菜单下的“Grid and Rulers”命令,在弹出的对话框中可以设置画布上网格线的尺寸,画布上的网格线可以帮助用户来设置控件的尺寸以及确定对齐控件的位置,所以需要选择合适的网格尺寸,默认的数值为50像素,可以根据需要设置自己的数值,在本例子中,设置尺寸为20个像素,如图7-15所示。 对开发环境进行了简要设置之后,接下来就要设置画布的尺寸,画布的尺寸也就是图形界面的未来尺寸,需要在绘制控件之前将界面的尺寸大体确定下来。

之后,就要将不同的控件绘制在画布上了,这个过程相对来说比较简单,而且绘制控件的时候暂时可以不用考虑控件的尺寸和位置对齐等问题,只要大致将不同的控件放置在相应的位置上即可,如图7-16所示。

图7-16 放置图形用户界面的控件

图7-17 设置必要控件的位置

这时的图形界面中包含了必要的图形界面控件,不过用来显示信息用的静态文本框没有排列好,显得非常凌乱,这个时候可以使用GUIDE的排列工具完成控件的排列工作。这里需要排列的控件是四个静态文本框,首先将最后一个静态文本框放置在理想的位置上,如图7-17所示。 然后选择四个静态文本框,单击GUIDE工具栏中的对齐工具按钮,在弹出的排列工具对话框中,分别选择垂直方向上均匀分布、水平方向上左边界对齐按钮,如图7-18所示。 单击“Apply”按钮之后,可以察看对齐控件之后的效果,如图7-19所示。

图7-18 对齐工具对话框

图7-19 对齐后的界面控件

在界面之中还需要创建菜单,创建菜单可以通过菜单编辑器完成。单击工具栏上的菜单编辑器按钮,可以打开菜单编辑器对话框,在对话框中单击创建新菜单按钮,则可以创建新的菜单,设置菜单属性如图7-20所示。

图7-20 创建菜单

注意 这里在创建菜单时,同时需要设置菜单的Label属性和Tag属性,Tag属性将在后面编写界面应用程序时使用。为了能够让菜单发挥作用,还需要添加一个菜单项,单击新建菜单项按钮,同样在菜单编辑器对话框中设置菜单项的Label属性和Tag属性分别为Done和ClearAxesDone。 到现在,整个图形界面元素就基本上创建完毕了,这时可以单击GUIDE工具栏中的Run按钮,激活图形界面,由于在前面的步骤中,设置了仅生成Fig文件,所以这时可以利用激活界面的方法来考察界面的布局状况,如图7-21所示。

图7-21 激活界面察看效果

7.5 图形用户界面编程 7.5.1 设置对象属性 MATLAB的图形对象都有不同的属性,在所有的属性中,比较重要的是控件的String属性和Tag属性,前者为显示在控件上的文本,后者相当于为控件取个名字,这个名字为控件在应用程序中的ID,控件的句柄和相应的回调函数都与这个名字有直接的关系。设置控件的属性可以使用GUIDE的属性察看器和控件浏览器完成。 单击工具条中的控件浏览器按钮,在弹出的对话框中,可以察看所有已经添加在图形界面中的对象以及对象的String和Tag属性,如图7-22所示。

图7-22 控件对象浏览器

首先设置图形窗体的属性,用鼠标双击控件对象浏览器中的“figure(Untitled)”,可以打开属性察看器编辑修改和察看图形窗体的属性。这里需要修改的属性包括图形的Name属性和Tag属性,将Name属性设置为Simple GUI,将Tag属性设置为simpleGui,如图7-23所示。 然后双击控件对象浏览器中的uicontrol(pushbutton1''Push Button''),这时将打开按钮对象的属性察看器,同时,在GUIDE的外观编辑器中,可以看到画布上的第一个按钮被选中了。这时,需要将该按钮的String属性设置为Draw,将Tag属性设置为btnDraw,如图7-24所示。

图7-23 设置图形界面的属性

图7-24 设置按钮的属性

依此类推,分别将其他的控件设置为如下的属性: ① 第二个按钮: * String : Change Color。 * Tag : btnChangeColor。 ② 静态文本框1: * String : Color。 ③ 静态文本框2: * String : Red。 * Tag : txtRed。 * HorizontalAlignment : left。

④ 静态文本框3: * String : Green。 * Tag : txtGreen。 * HorizontalAlignment : left。 ⑤ 静态文本框4: * String : Blue。 * Tag : txtBlue。 ⑥ 静态文本框5: * String : Edge Color。 ⑦ 滚动条: * Tag : sliderEdgeColor。

注意: 在设置图形界面对象的Tag属性时,建议按照如下的格式进行设置:objectstyleObject-Function,即使用表示对象类型的字符串作为Tag属性的前缀,这样在编写控件回调函数时,能够直接从控件的名称上判断控件的类型,便于程序的管理和维护。 若此时再次激活图形界面,则得到的图形界面效果如图7-25所示。

图7-25 设置控制对象属性得到的效果

7.5.2 编写回调函数 完成了前面的工作之后,就要通过编写控件的回调函数来实现不同控件的界面功能了。图形用户界面的功能主要通过控件响应用户的动作来完成,特别在MATLAB的图形用户界面应用程序中,用户界面控件主要响应用户的鼠标动作——单击动作也就是选中控件的动作。响应鼠标动作的方法通过编写回调函数来完成。 MATLAB图形用户界面控件的回调函数,是指在界面控件被选中的时候,响应动作的M语言函数。在回调函数中,一般需要完成如下功能: * 获取发出动作的对象句柄。 * 根据发出的动作,设置影响的对象属性。

例如,在单击“Draw”按钮之后,首先需要在回调函数中获取发生对象句柄,一般这一步骤都是由MATLAB背后的工作机制来完成的,然后设置相应对象的属性——在坐标轴上绘制相应的曲线或者图形对象,这一步骤需要用户编写具体的代码来实现。不过,利用GUIDE进行图形界面编程的好处之一就是,GUIDE会为用户创建一个M回调函数文件的构架,一般地来说,不需要用户自己来获取发生事件的控件对象,构架文件将自动处理并将相应的句柄传递到函数中。

一般地,回调函数的声明为 function object_Callback(hObject , eventData , handles) 其中: * object为发生事件的控件的Tag属性字符串。 * hObject为发生事件的控件的句柄。 * eventData为保留字段,目前版本的MATLAB还暂时不使用。 * handles为一个结构,这个结构中包含所有界面上控件的Tag属性值,还可以添加用户自己的数据。

handles结构在图形用户界面编程中是相对比较重要的元素。主要的原因是该结构中不仅包含了所有界面对象的Tag属性,通过Tag属性可以直接像操作控件句柄一样来获取或者修改控件的属性,而且在handles结构中还可以添加用户自定义的需要在不同的回调函数之间共享的数据。 为了能够创建M构架文件,还需要执行“Tools”菜单下的“GUI Option”命令,在弹出的对话框中,选择“Generate FIG-file and M-file”单选框,一般在激活界面的同时,执行相应的M函数文件,如图7-26所示。

图7-26 选择生成M文件的属性

还可以通过GUIDE工具条中的M语言编辑器按钮编辑图形界面的M文件,这时将首先询问保存fig文件,保存fig文件后再打开图形界面的M语言函数文件。 图形界面的M语言函数文件将为不同的控件分别创建至少一个函数,这些函数都作为图形用户界面应用程序的子函数存在,请读者仔细观察由GUIDE创建的M函数文件,也可以直接编辑本章的例子观察M函数文件的内容。 GUIDE创建的M文件一般由调度代码、GUI回调函数和GUI控件回调函数几个不同的部分组成。这里将结合例子说明这几部分代码的作用。

首先,程序的头部为程序的初始化和调度代码,一般情况下,用户不需要修改这部分代码。在程序执行的过程中,这部分代码起到了调度程序的功能,分别完成了打开图形界面、初始化以及响应用户动作的功能。一般地,此段代码如下: % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @simple_gui_OpeningFcn, ... 'gui_OutputFcn', @simple_gui_OutputFcn, ...

'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end   if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); % End initialization code - DO NOT EDIT

上面代码中的核心是调用函数gui_mainfcn,该函数起到了图形界面创建、控件监听等作用,有兴趣的读者可以阅读该函数的代码,加深对图形界面程序创建的认识。 function simple_gui_OpeningFcn(hObject, eventdata, handles, varargin) 该函数负责打开图形界面,同时,若程序中需要对一些全局的参数进行初始化或者设置时,可以将初始化用户数据的代码添加在该子函数中。在该子函数中包含下面一句代码: % Update handles structure guidata(hObject, handles);

这里调用guidata函数,将结构handles与GUI界面共同保存起来。如前文所述,handles结构中包含了所有图形界面上控件的Tag属性值(也就是句柄),同时还能够完成在不同的回调函数之间共享用户数据的功能。不过,每次修改了handles结构内部数据之后,一定要调用guidata函数更新该结构的数据,否则在其他的子函数中,就无法使用最新的数据了。

第二个回调函数是 function varargout =simple_gui_OutputFcn(hObject, eventdata, handles) 该子函数负责将图形界面的句柄返回给用户的输出参数,前提是用户在执行该M文件时,在命令行中指定了输出: h = simple_gui; 这时h将是图形用户界面窗体的句柄。

接下来的子函数是分别用来响应用户的动作输入,完成相应功能的GUI控件回调子函数。在这里首先编写Draw按钮的回调函数。在M文件中找到函数btnDraw_Callback,并且添加相应的代码: function btnDraw_Callback(hObject, eventdata, handles) % 绘制三维曲面 hsurfc = surf(peaks(30),'FaceColor','blue'); % 保存三维曲面的句柄 handles.hsurface = hsurfc; guidata(hObject,handles);

% 设置相应的文本显示当前色彩数值 set(handles.txtRed,'String',['Red: 0' ]); set(handles.txtGreen,'String',['Green: 0']); set(handles.txtBlue,'String',['Blue: 1']); 在上述的代码中,首先绘制了三维曲面,然后将三维曲面的句柄保存在handles结构中。最后还设置了相应色彩的文本属性以显示不同的色彩数值。

注意:再次强调 在GUIDE创建的M函数文件中,若修改了handles结构,则需要通过guiddata函数将handles的结构保存起来,只有这样才能够通过handles结构将不同的用户数据传递到相应的子函数中。有关guidata函数请读者参阅MATLAB的帮助文档或者在线帮助。 若此时执行M文件,单击“Draw”按钮之后,就可以在坐标轴中观察到程序的输出效果——三维的曲面,如图7-27所示。

图7-27 绘制曲面的效果

继续修改M文件,在不同控件的回调函数中添加代码完成用户界面的功能。Simple GUI的M代码(回调函数部分)如下: 单击“Change Color”按钮的回调函数: 001 % --- Executes on button press in btnChangeColor. 002 function btnChangeColor_Callback(hObject, eventdata, handles) 003 %修改曲面色彩 004 % 获取曲面的句柄 005 hsurf = handles.hsurface; 006 %hsurf = findobj(gcf,'Type','Surface');

007 % 生成随机的色彩 008 newColor = rand(1,3); 009 % 设置曲面的色彩 010 set(hsurf,'FaceColor',newColor); % Set face color of surface 011 % 设置相应的文本显示当前色彩数值 012 set(handles.txtRed,'String',['Red: ' num2str(newColor(1))]); 013 set(handles.txtGreen,'String',['Green: ' num2str(newColor(2))]); 014 set(handles.txtBlue,'String',['Blue: ' num2str(newColor(3))]);

创建滚动条的回调函数: 001 % --- Executes during object creation, after setting all properties. 002 function sliderEdgeColor_CreateFcn(hObject, eventdata, handles) 003 004 usewhitebg = 1; 005 if usewhitebg 006 set(hObject,'BackgroundColor',[.9 .9 .9]); 007 else 008 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); 009 end

滚动条的回调函数: 001 % --- Executes on slider movement. 002 function sliderEdgeColor_Callback(hObject, eventdata, handles) 003 % 修改曲面的边缘色彩 004 % 获取对象句柄 005 hsurf = handles.hsurface; 006 %hsurf = findobj(gcf,'Type','Surface'); % Get handle to surface 007 % 获取滚动条当前的数值 008 newRed = get(hObject,'Value'); % Get new color from slider 009 % 设置新的色彩数值 010 currentColor= rand(1,3); % Assign value to first element of HSV 011 currentColor(1) = newRed;

菜单命令的回调函数: 001 % -------------------------------------------------------------------- 002 function CleartheAxes_Callback(hObject, eventdata, handles) 003 004 % -------------------------------------------------------------------- 005 function ClearAxesDone_Callback(hObject, eventdata, handles) 006 % 清除当前的坐标轴内容 007 cla

图7-28 图形用户界面简单例子的执行状态

在这个例子中使用了一个非常重要的函数——guidata,该函数主要用来在图形用户界面中存储或者获取用户数据,它的基本语法为 * 存储数据:guidata(object_handle,data)。 * 获取数据:data = guidata(object_handle)。 这里object_handle若不是图形窗体的句柄,就是使用object_handle句柄对象的父层次的图形窗体对象句柄来保存数据。guidata函数为用户提供了一种简便的保存和获取用户应用程序数据的途径,它是在MATLAB图形用户界面应用程序中常用的函数之一。

7.6 常用的图形界面函数 为了便于用户创建图形用户界面应用程序,MATLAB还提供了一些预定义的图形用户界面,比如错误信息对话框、用户输入对话框等,在表7-2中,对这些常用的对话框函数进行了总结。

表7-2 常用的图形界面函数

7.7 本 章 小 结 在本章简要讨论了在MATLAB中创建图形用户界面的方法,详细介绍了MATLAB中图形对象的层次以及图形对象句柄的使用方法,以及MATLAB创建图形用户界面应用程序的集成开发环境GUIDE的使用方法。本章通过一个简单的示例说明了创建图形用户界面的过程。在MATLAB中创建图形用户界面有两种方法,本章介绍的GUIDE是相对比较简单、易行的方法,而另外一种方法——图形句柄,相对的编程过程比较繁琐,工作量也很大,所以有兴趣的读者请参阅MATLAB的帮助文档。

另外,尽管能够利用M语言创建图形用户界面,希望读者依然牢记一点,就是MATLAB的图形用户界面能力比较有限,它不能像VC或者VB那样创建出具有Windows风格的图形窗体,也不能像Java或者Python语言那样创建出功能复杂的用户界面。当用户的需求难以使用M语言实现的时候,可以考虑使用Java语言来实现相应的功能。有关在M语言中使用Java语言的相关知识请参阅MATLAB的帮助文档或者《MATLAB外部接口编程》一书。