630 likes | 790 Views
第九章 图形句柄和 GUI 图形设计. 句柄图形对象的基本知识 图形框架窗口对象的基本内容 图形对象属性的获取和设置 图形对象的操作 GUI 的基本知识 GUI 对象的创建方法 GUI 的编程方法 GUI 的 M 文件 GUI 控件的使用. 一、 句柄图形对象. 图形框架窗口对象 (Figure) 图形对象属性的获取和设置 图形对象的操作. ( 1 ) 图形框架窗口对象 (Figure). 绘制图形的图形框架窗口对象 核心 (Core) 对象 绘图 (Plot ) 对象 注释对象. 窗口对象.
E N D
第九章 图形句柄和GUI图形设计 • 句柄图形对象的基本知识 • 图形框架窗口对象的基本内容 • 图形对象属性的获取和设置 • 图形对象的操作 • GUI的基本知识 • GUI对象的创建方法 • GUI的编程方法 • GUI的M文件 • GUI控件的使用
一、 句柄图形对象 • 图形框架窗口对象(Figure) • 图形对象属性的获取和设置 • 图形对象的操作
(1) 图形框架窗口对象(Figure) • 绘制图形的图形框架窗口对象 • 核心(Core)对象 • 绘图(Plot )对象 • 注释对象
窗口对象 • 图形框架窗口对象是MATLAB 显示图形的窗口,包括菜单、工具栏、 交互式对象、弹出式菜单、坐标、坐标轴子对象以及其他的图形对象。 • MATLAB 对一次打开的图形数目没有限制(用户的计算机系统可能会做出限制)。 • 在MATLAB 中,图形框架窗口对象有两个特殊的作用: • 包含数据图形; • 包含图形用户界面操作GUI。
绘制图形的图形框架窗口对象 • MATLAB 语言中实现句柄访问的函数
核心(Core)对象 • 核心对象包括直线、文本和特殊对象(如光、图像和面图)等基本的绘图命令;而坐标系对象包括线、面图和等高线图等描述数据的对象。
核心(Core)对象举例 [x,y] = meshgrid([-2:.4:2]); Z = x.*exp(-x.^2-y.^2); fh = figure('Position',[350 275 600 450],'Color','g'); ah = axes('Color','w','XTick',[-2 -1 0 1 2],... 'YTick',[-2 -1 0 1 2]); sh = surface('XData',x,'YData',y,'ZData',Z,... 'FaceColor','w',... 'EdgeColor','r','Marker','o',... 'MarkerFaceColor','b'); view(3)
绘图(Plot )对象 • MATLAB 提供了一系列的高级绘图函数来创建绘图对象,这些绘图对象的属性具有重要的意义,使用它们可以很方便地访问绘图对象所包含的核心对象的重要属性。
绘图(Plot )对象举例 [x,y,z] = peaks; [c,h] = contour(x,y,z); set(h,'LineWidth',3,'LineStyle',':')
注释对象 • 用户一般习惯于使用图形编辑工具栏或是Insert菜单来创建注释对象,同时,用户也可以使用注释函数来创建注释对象。 • 注释对象在一个隐藏的坐标轴下创建,该坐标轴延伸到图形整个长度和宽度,这样,用户可以使法向坐标系(以图形的左下点为(0,0),右上点为(1,1))在图形的任意部位定义图例注释。
(2) 图形对象属性的获取和设置 • get函数 • set函数 • 对象属性的缺省设置和查询 • 属性查询和设置示例
get函数 • 在MATLAB 中,使用get函数可以得到对象的属性及其属性值,其通常的调用格式为 : get(H) 获取H句柄对象所有属性的当前值; get(H,PN) 获取H句柄对象由PN所指定属性的当前值
set函数 • 在MATLAB 中,使用set函数可以设置对象的属性值,其通常的调用格式如下。 set(H,'PropertyName',PropertyValue)命令设置PropertyName的属性为PropertyValue。 set(H,a)命令中,a为结构型变量,字段名为图形对象的属性名,字段值为映像的属性值。 set(H,'PropertyName1',PropertyValue1,'PropertyName2',PropertyValue2,...)命令同时设置多个属性的值。
对象属性的缺省设置和查询 • MATLAB 在建立对象时把默认属性赋给各对象。如果想不采用这些默认值,就必须使用句柄图形工具对它们进行设置。当每次都要改变同一属性时,MATLAB 允许设置用户自己的默认属性。MATLAB 让用户改变对象层次结构中任意一点上的单个对象或对象类型的默认属性。
get(H,’DefaultObjectTypeObjectProperty’) 获取缺省值 set(H,’ DefaultObjectTypeObjectProperty’,PropertyValue) 设置“用户定义”缺省值; set(H,’ DefaultObjectTypeObjectProperty’,’remove’) 删除“用户定义”缺省值
属性查询和设置示例 创建二维图形时,分别用元胞数组和构架数组设置对象属性。 clf reset,x=0:pi/12:2*pi; PN1={'Color', 'LineWidth','Marker'}; PV1={[1 0 0], 5 , 'd'}; plot(sin(x),cos(x),PN1,PV1) axis square off PS.Color='g';PS.LineWidth=2; line(sin(7*x),cos(7*x),PS);
例:axes 轴位框设计、rectangle 的运用、及轴外注释。所谓轴外注释,实际上是使用了两个轴位框。一个轴位框充满全部图形窗,其坐标框被隐去,而只写注释文字。而另一个比较小的轴位框用于绘图。这样从外表看去,注释就处于那小轴位框的外部。(参见lesson_handlse)
(3) 图形对象的操作 • 查找对象 • 堆积次序
查找对象 • 句柄图形提供了对图形对象的访问途径,并且允许用函数get和set定制图形。 • 如果用户忘记保存句柄或图形对象的句柄,或者当变量被覆盖时,如果要改变对象的属性,就必须进行对象句柄的查找。MATLAB 提供了查找对象的函数gcf、gca、gco和findobj等 。
堆积次序 • 堆积次序决定哪一对象叠加在其他对象上。开始时,堆积次序在对象被创建时就被决定,最后创建的对象在堆栈的顶部。 • 当前的堆积次序是由一个给定的对象Children句柄出现的次序给出的。
影响line 或plot 画线时线型和色彩的“父”对象设置。(1)t=(0:pi/50:2*pi)';k=0.4:0.1:1;Y=cos(t)*k; line(t,Y,'Color',[1 0 0],'LineStyle','-.') (2)clf reset set(gca,'ColorOrder',[0 0 0;0.7 0.7 0.7],'LineStyle','-|:') line(t,Y) (3)clf reset set(gcf,'DefaultAxesLineStyleOrder','-|:'); set(gcf,'DefaultAxesColorOrder',[1 0 0;0 0 1]); line(t,Y)
二、 GUI 编程 对于传递函数为 的归一化二阶系统,制作一个能绘制该系统 单位阶跃响应的图形用户界面。 (参见Lesson9_1)
图形用户界面的设计原则和一般步骤 • 设计原则 • (1)简单性 • 设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特性。 • (2)一致性 • 读者自己开发的界面风格要尽量一致; • 新设计的界面要与其他已有的界面风格不要截然相左。 • (3)习常性 • 设计新界面时,应尽量使用人们所熟悉的标志和符号。 • (4)其它考虑因素
一般制作步骤 • 分析界面所要求实现的主要功能,明确设计任务; • 在稿纸上绘出界面草图,并站在使用者的角度来审查草图; • 按构思的草图,上机制作(静态)界面,并检查之; • 编写界面动态功能的程序,对功能进行逐项检查。
界面菜单 图形窗的标准菜单 标准菜单受界面菜单‘MenuBar’属性管理。该属性有两个取值[none|{figure}]。当属性值取‘none’时,图形窗不显现标准菜单(及工具条);当属性值取‘figure’时,图形窗显现标准菜单。 例:隐藏和恢复标准菜单的显示。 (1)获得缺省设置的标准菜单H_fig=figure (2)隐去标准菜单的两种方法 set(H_fig , 'MenuBar','none')set(gcf,'menubar',menubar); (3)恢复图形窗上标准菜 set(gcf,'menubar','figure');
自制的用户菜单 自制用户菜单指令典型调用格式: Hm=uimenu(‘H_parent’,’PropertyName’,’PropertyValue’,…); 说明: Hm为该用户菜单的句柄。H_parent为其父对象的句柄。该父对象只能是图形窗对象,或另一用户菜单对象。如果H_parent输入参数缺省,那么菜单项将建立在当前图形窗的顶层菜单条上。 ‘PropertyName’和’PropertyValue’构成属性二元对,即(属性名,属性值)。他们定义用户菜单的属性。
如何自制一个带下拉菜单表的用户菜单。该菜单能使图形窗背景颜色设置为兰色或红色。如何自制一个带下拉菜单表的用户菜单。该菜单能使图形窗背景颜色设置为兰色或红色。 figure h_menu=uimenu(gcf,'label','Color'); h_submenu1=uimenu(h_menu,'label','Blue',... 'callback','set(gcf,''Color'',''blue'')'); h_submenu2=uimenu(h_menu,'label','Red',... 'callback','set(gcf,''Color'',''red'')');
用户菜单的属性 回调属性和菜单名 (1)菜单名属性 属性‘Label’用来命名用户菜单项的名称,它的属性值一定是字符串。该字符串应选择得简短扼要反映相应操作得本质。
(2)回调属性 回调函数属性的取值也是字符串。该字符串可以包含任何MATLAB的合法命令和M文件名。当用户选用该菜单时,回调的作用是:将那属性值字符串送给eval去执行,以实现该菜单的功能。 如果用户不对自制菜单项的回调属性值进行设置,那么该菜单项的回调属性值是“空串”,因而当用户选择该菜单项时,将没有任何反映。
例:在图形窗上自制一个名为【Test】的“顶层菜单项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。例:在图形窗上自制一个名为【Test】的“顶层菜单项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。 (1)在MATLAB指令窗中运行以下程序可产生带分隔的封闭坐标轴。 grid on,set(gca,'box','on') (2)在MATLAB指令窗中用以下eval指令可产生带分隔的界面。 eval('grid on,set(gca,''box'',''on'')') (3)直接连续表示法uimenu('Label','Test','Callback','grid on,set(gca,''box'',''on''),')
(4)方括号续行号表示法uimenu('Label','Test', ... 'Callback',['grid on,' , ... 'set(gca,''box'',''on'');']) (5)串变量法 Lpv='Test'; Cpv=['grid on,','set(gca,''box'',''on''),']; uimenu('Label', Lpv, 'Callback' , Cpv) (6)构架表示法 PS.Label='Test'; PS.Callback=['grid on;','set(gca,''box'',''on'');']; uimenu(PS)
设置简捷键或快捷键 简捷键的制作方法: 如果想为某菜单项制作简捷键(Shortcut key),只要使’Label’的属性值字符串包含&X 便可。在此的X代表用户喜欢的任何字母。 简捷键的提示方法: 被设置简捷键的那菜单名中将出现字符X。 简捷键的操作方式: 只有在相应菜单项可见时,简捷键操作(ALT+X)才起作用。
快捷键的制作方法: 某菜单项快捷键(Accelerator key) 的制作,必须依赖用户菜单uimenu的‘Accelerator’属性,属性值可以取任何字母。 快捷键的提示方式: 被设置快捷键的那菜单名后将出现(Ctrl+Y)。 快捷键的操作方式: 当相应菜单项不可见时,快捷键操作才起作用。 简捷键主要用于顶层菜单项;快捷键主要用于(自身不再带子菜单的)子菜单项。
例:设计Color 菜单项及其下拉的Blue 菜单各带一个简捷键,,而另一项下拉菜单Red 带一个快捷键。 figure h_menu=uimenu(gcf,'Label','&Color'); h_submenu1=uimenu(h_menu,'Label','&Blue',... 'Callback','set(gcf,''color'',''blue'')'); h_submenu2=uimenu(h_menu,'label','Red',... 'Callback','set(gcf,''color'',''red'')',... 'Accelerator','r');
用户菜单的外观设计 用户菜单的外观主要取决于四个属性:位置’Position’、分隔线‘Separator’、检录符‘Checked’、前景颜色‘ForgroundColor’。 ‘Position’的属性值总是正整数1,2,3等。顶层菜单项的位置按自左至右次序,子菜单按自上而下次序,分别编序为1,2,3等。与其他图像对象一样,该属性的取值和设置可通过get,set指令实现。 ‘Seperator’属性有两个取值[on|{off}]。假如某菜单项的该属性被设置成‘on’,那么在生成界面中,将出现一个分隔线使该菜单项与其上方的菜单隔开。
‘ForgroundColor’是用来设置菜单名文字颜色的,其属性值可取任何合法的单色代表符或RGB三元组。‘ForgroundColor’是用来设置菜单名文字颜色的,其属性值可取任何合法的单色代表符或RGB三元组。 检录属性’Checked’有两个取值可能[on|{off}]。缺省时,取值‘off’,不显现检录符。当取值设置为‘on’时,一旦那菜单项被选,其前就出现“√”标记。 例:设计用户菜单‘Option’设置为顶层的第三菜单项;下拉菜单被两条分隔线分为3个菜单区;最下菜单项又有两个子菜单组成。(参见Lesson9_option1) 例:当某菜单项选中后,如何使该菜单项贴上检录符“√”。(参见Lesson9_option2)
使能(Enable)与可见性(Visible)属性 用户菜单项可以通过使能属性或可见属性的取‘off’值,而暂时失能。即该菜单项无法连续被选,除非它因其他菜单项被选而重新激活。 例:制作一个带4个子菜单项的顶层菜单项;该下拉菜单分为两个功能区;每个功能区的两个菜单项是相互对立的,因此采用使能属性处理;当图形窗坐标轴消隐时,整个坐标分隔控制功能区不可见。(参见Lesson9_option_axis)
现场菜单的制作 步骤: • 利用指令uicontextmenu创建现场菜单对象; • 利用指令uimenu为这现场菜单制作具体的菜单项。 • 利用指令set将此现场菜单和某图形对象联系在一起。 例:绘制一条Sa 曲线,创建一个与之相联系的现场菜单,用以控制Sa 曲线的颜色。(参见Lesson9_sa)
用户控件 Hc=uicontrol(H_parent,’PN’,pv,…) 说明: Hc为待制作用户控件的句柄。H_parent为其父对象句柄;当该句柄缺省时,MATLAB将在当前图形界面上添加用户控件。 ‘PN’,pv为(属性名,属性值)二元对。它用来定义用户控件的属性(如类型,回调等)。象其他图形对象一样,这属性二元对,也可以用构架数组、元胞数组替代。
例:双位按键、无线电按键、控件区域框示例(参见Lesson9_control1)例:双位按键、无线电按键、控件区域框示例(参见Lesson9_control1) 例:静态文本框、滑动键、检录框示例 (参见Lesson9_control2,callcheck) 例:可编辑框、弹出框、列表框、按键示例 (参见Lesson9_control3,calledit) 利用递归法编写用户界面函数文件 (参见Lesson9_M)
启动GUI • 用户欲启动GUI操作,可以在命令窗口中输入guide命令。
布局(Layout)编辑器 • 当用户在GUIDE 中打开一个GUI时,该GUI将显示在 Layout编辑器中,Layout编辑器是所有GUIDE工具的控制面板。
布局(Layout)编辑器 • 用户可以使用鼠标拖动模板左边的控件(按钮、坐标轴、单选按钮等)到中间的布局区域 。
GUIDE模板介绍 • GUIDE Quick Start对话框提供了几种常用的GUI模板 。
运行GUI • 单击工具栏最右边的绿色按钮,即运行当前的GUI窗口。
创建GUI对象 • GUI窗口的布局 • 改变GUI窗口的大小 • 控件的添加和对齐 • GUI控件的属性控制 • 属性查看器的显示 • 一些常用的属性 • 菜单的添加 • 主菜单的创建 • 弹出式菜单的的创建
(1)GUI窗口的布局 • 改变GUI窗口的大小 在布局编辑器中可以很方便地改变GUI 中网格区域的大小,只需单击网格区域的右下角,当鼠标变为箭头形式时,拖动鼠标,即可适时改变窗口的大小 。
(2)GUI控件的属性控制 • 属性查看器的显示 用户可以使用如下3种方式打开: • 在布局窗口中双击某个控件。 • 在View 菜单中选择Property Inspector选项。 • 右击某个控件并从弹出的快捷菜单中选择Inspect Properties选项。
(3)主菜单的创建1 • 菜单属性的设置 单击右图中的菜单标题Untitled 1,将在菜单编辑器的右边显示该菜单的属性提供给用户进行编辑,如Label、Tag、Accelerator、Separator和Checked等属性。