简介
GUI即图形用户界面(Graphical User Interface),人机交互的一种方式,可以简化用户的操作,比如只需要点点窗口上的按键或者菜单选择等等,就可以实现一个复杂的功能,有点类似黑盒的操作吧。
本篇将主要介绍GUI的使用,以及一些功能,后续的篇章再使用GUI来设计实例。
打开GUI可以在Matlab命令窗口输入:guide,就可以打开GUIDE的界面,也可以从主页窗口新建菜单中找到GUIDE,同时发现,还有个App Designer的选项,这个是R2016A版本开始推出的一个GUIDE的替代品,有新的组件,也更容易上手,不过只支持有限的2D图形,所以相对GUIDE还是有些不足,但是学了GUIDE再去操作App Designer显然是更轻松的一件事。
编辑界面
选择上述的两种方法之一,打开GUIDE,弹出的窗口如下,选择对应的模板都会在右边看到相应的预览。
新建GUI下对应的四个模板描述:
Blank GUI(Default):空白的GUI界面
GUI with Uicontrols:带有界面控件的GUI
GUI with Axes and Menu:带有坐标轴和菜单的GUI
Model Question Dialog:提问对话框模板
在下方把白框勾上,就可以改变存放文件的路径,接下来开始操作,选择Blank GUI,然后指定好存放的位置并命名,点确定即可;完成后,会出现对应的空白窗口(*.fig)以及一个同名字的M文件【**注:**不可更改为不一致的文件名,否则运行要出错】
在窗口的左边的小图标,称为控件面板,各个小图标即控件;上方的菜单啥的就是一些快捷按钮了,把鼠标放到上方就会出现对应的功能描述,具体就不介绍了,等下设计实例的时候看下使用效果就懂意思了;然后都是空白框框的地方,就是布局工作区,即组件将要放置的位置。
菜单设计
菜单几乎包含了应用程序所有的功能,点击界面上方的菜单编辑器快捷键,就可打开对应的窗口
菜单编辑器中有:新建菜单、新建菜单项、新建上下文菜单,然后四个移动选定项的箭头以及删除选定项的按钮。
选中Untitled 1然后点击新建菜单项,就会在此菜单下新建子菜单,那四个箭头可以改变菜单之间的排列关系
选中Untitled 2,勾选右侧的”在此菜单项前添加选中标记“;选中Untitled 3,勾选”分隔符位于此菜单项上“
然后点确定,回到GUI窗口,点击上方绿色的小三角,”运行图形“快捷键,如果弹出要你保存之类的提示,点确定就好,出现运行的结果,箭头所指的就对应刚刚勾选的功能子标题对应的属性
在菜单编辑器中还有个上下文菜单,这个是相当于给组件添加右键菜单的,先在编辑器中创建好菜单
然后回到GUI窗口,拖个按钮控件到工作区举例
这时候按钮还未赋予右键菜单的能力,先右键找到属性检查器并打开,将UIContextMenu的选项None改为刚刚创建的菜单”Untitled 4“,即赋予了该按钮右键菜单是Untitled 4,然后直接点右上角的X关闭属性检查器
这时候回到GUI窗口,运行图形,在出现的界面,在按钮上右键,弹出Untitled 4下5和6的菜单选项
控件设计
控件描述
本部分对刚刚GUI窗口左边的控件进行简单介绍以及使用,从上到下,从左往右的顺序介绍,如果介绍的不太对……,就自行操作下吧~很好理解其作用的
个人理解
控件名 | 作用 | 控件名 | 作用 | 控件名 | 作用 |
---|---|---|---|---|---|
选择![]() | 指示控件的选中状态,并不算是一个功能控件 | 可编辑文本![]() | 可在其内输入文本 | 表![]() | 创建表用户界面组件 |
按钮![]() | 鼠标单击后触发相应的操作 | 静态文本![]() | 用于显示特定的文本标识 | 坐标轴![]() | 创建笛卡尔坐标区,可以在其中画二维或三维的图 |
滑动条![]() | 类似一个开关,两种不同操作的切换 | 弹出式菜单![]() | 单击后,出现选项清单以供选择 | 面板![]() | 创建面板容器对象,将控件分组,划区 |
单选按钮![]() | 选择状态会有个黑色小圈,反之无 | 列表框![]() | 一般是一组选项的列表,可单选或多选 | 按钮组![]() | 放置单选或者切换按钮 |
复选框![]() | 选择状态下✔,反之无 | 切换按钮![]() | 在工具栏上创建切换按钮 | ActiveX 控件![]() | 在图窗窗口中创建 Microsoft ActiveX 控件 |
Matlab转译
在使用控件时,只需要直接把对应的控件拖到工作区,然后调整控件大小;或者直接点击对应控件,然后出现十字光标,在工作区手动划出一个大小的该控件。
控件属性
了解了这些控件后,就需要再了解下控件的属性,才能在设计的时候用的很顺手,接下来再介绍下常规的属性,若有特殊的属性未进行介绍,就需要自行获取,在窗口输入下方的命令,打开控件文档:
%本人使用了R2016A的版本
web(fullfile(docroot, 'matlab/gui-controls-and-indicators.html'))
然后弹出的窗口就是控件的所有描述了,下方截取了属性的截图
对应的中文版
此外还可以直接去mathworks的网站看,例如:http://www.mathworks.com/help/releases/R2016a/matlab/gui-controls-and-indicators.html
接下来对部分分类好的属性进行介绍
【1】外观与行为
(1)BackgroundColor - 控件背景色
Note:[.94 .94 .94]
(默认) | RGB 三元数 | 短名称 | 长名称
指定为 RGB 三元数、短名称或长名称。用指定的颜色填充 uicontrol 界定的区域。
RGB 三元数是三元素行矢量,其元素分别指定颜色中红、绿、蓝分量的强度。强度必须处于范围 [0,1]
之间,例如 [0.4 0.6 0.7]
。下表列出了具有等效颜色字符串的 RGB 三元值。
长名称 | 短名称 | RGB 三元数 |
---|---|---|
'yellow' | 'y' | [1 1 0] |
'magenta' | 'm' | [1 0 1] |
'cyan' | 'c' | [0 1 1] |
'red' | 'r' | [1 0 0] |
'green' | 'g' | [0 1 0] |
'blue' | 'b' | [0 0 1] |
'white' | 'w' | [1 1 1] |
'black' | 'k' | [0 0 0] |
(2)ForegroundColor - 控件文本颜色
Note:[0 0 0]
(默认) | RGB 三元数 | 短名称 | 长名称
其他与背景色一致
(3)CData
- 要显示在 uicontrol 上的可选图像
Note:三维真彩色 RGB 值数组
要显示在 uicontrol 上的可选图像,指定为包含真彩色 RGB 值的三维数组。数组中的值可以是:
- 介于
0.0
和1.0
之间的双精度值 - 介于
0
和255
之间的uint8
值
按钮和切换按钮是唯一完全支持 CData
的 控件。如果为单选按钮或复选框指定 CData
属性,则图像可能与文本字符串重叠。另外,为单选按钮或复选框指定图像会禁用在选择或取消选择它们时显示的功能。
(4)Visible
- 控件可见性
Note:'on'
(默认) | 'off'
控件可见性,指定为 'on'
或 'off'
。当 Visible
为 'off'
时,控件不可见,可以查询并设置其属性。
要使程序更快启动,请将最初未显示的所有 件的 Visible
属性设置为 'off'
。
(5)String
- 要显示的文本
Note:字符串 | char
值的元胞数组 | 管道分隔的行矢量 | 填充列矩阵
控件的[Style
]属性值确定可以使用的数组格式
String
属性的一些重要特征:
- 如果为复选框、按钮、单选按钮或切换按钮指定一个元胞数组,则 MATLAB 仅显示元胞数组中的第一个元素。
- 如果要指定具有不同长度的多行文本,则将每行指定为元胞数组中的一个单独元素。例如,可以使用一个元胞数组显示各个段落中的句子。
- 如果以编程方式替换
'edit'
样式的 控件的字符串,则光标将移到文本开头。 - 如果要指定 Unicode® 字符,则将 Unicode 十进制码传递到
char
函数。例如,['Multiples of ' char(960)]
显示为Multiples of
π。
【2】控件对象的信息
(1)Enable
- 控件的运行状态
Note:'on'
(默认) | 'off'
| 'inactive'
Enable
属性控制控件是否响应按钮点击。以下是可能的值:
'on'
– 控件处于工作状态。'off'
– 控件未处于工作状态,并且呈灰显。'inactive'
– 控件未处于工作状态,但其外观与当Enable
设置为'on'
时相同。
Enable
属性的值和按钮点击的类型共同确定响应。
启用值 | 响应左键点击 | 响应右键点击 |
---|---|---|
'on' | 控件的 Callback 函数执行。 | 执行图形的 WindowButtonDownFcn 回调。控件的 ButtonDownFcn 回调执行。 |
'off' 或 'inactive' | 执行图形的 WindowButtonDownFcn 回调。控件的 ButtonDownFcn 回调执行。 | 执行图形的 WindowButtonDownFcn 回调。控件的 ButtonDownFcn 回调执行。 |
(2)Style
- 控件的样式
Note:‘pushbutton’`(默认) | 字符串
控件的样式,指定为下表中的字符串
样式值 | 说明 |
---|---|
'pushbutton' | 释放鼠标按钮前显示为按下状态的按钮。 |
'togglebutton' | 可具有两种状态(未按下和按下)的按钮。每次点击切换按钮时,它的状态都会发生变化。 |
'checkbox' | 可具有两种状态(选中或取消选中)的复选框。当用户在其上点击并释放鼠标按钮时,状态发生变化。 |
'radiobutton' | 可具有两种状态(选择和取消选择)的按钮。单选按钮在一组相关的单选按钮中有意安排为互斥。 |
'edit' | 可编辑的文本字段。 |
'text' | 静态文本字段。 |
'slider' | 用户沿水平或垂直栏按下的按钮。按钮的位置指示指定范围中的值。 |
'listbox' | 用户可从中选择一项或多项的项列表。与弹出式菜单不同,点击列表框时不会展开。 |
'popupmenu' | 孤立菜单,在点击它时,它将展开以显示选择列表。它处于折叠状态时,菜单显示当前选择。 |
(3)Tag
- 控件标识符
Note:''
(默认) | 字符串
可以指定唯一的 Tag
值以便用作控件的标识符。可由用户定义个性化的名字
(4)TooltipString
- 工具提示文本字符串
用户将鼠标指针悬停在控件上并停留在该位置时,将显示工具提示。要创建包含多行文本的工具提示,使用 sprintf
生成包含换行符 (\n
) 的一个字符串,然后将TooltipString
设置为该字符串。
指定包含两行的 TooltipString示例:
b = uicontrol;
s = sprintf('Tooltip line 1\nTooltip line 2');
b.TooltipString = s;
(5)UserData
- 要与控件对象关联的数据
Note:空数组(默认) | 数组
要与控件对象关联的数据,指定为任何数组。如果想在创建的 UI 内或 UI 间共享数据值,则指定 UserData
会比较有用。
(6)Position
- 控件的位置和大小。
Note:[left bottom width height]
控件相对于父级的位置和大小,指定为矢量 [left bottom width height]
。此表介绍该矢量中的每个元素。
元素 | 说明 |
---|---|
left | 父容器的内部左边缘与控件的外部左边缘之间的距离 |
bottom | 父容器的内部下边缘与控件的外部下边缘之间的距离 |
width | 控件的左右外部边缘之间的距离 |
height | 控件的上下外部边缘之间的距离 |
所有测量值都采用 Units
属性指定的单位。
- 附注: 如果控件的父级是图形,则
Position
值是相对于图形的可绘制区域的值。图形的可绘制区域是窗口边框内部的区域,不包括菜单栏和工具栏。
修改位置矢量中的一个值
如果要更改 Position
矢量中的一个值,可以结合使用圆点表示法和数组索引。例如,此代码将控件的宽度更改为 52
:
b = uicontrol;
b.Position(3) = 52;
b.Position
%结果:
ans =
20 20 52 20
(7)Units
- 测量单位
Note:'pixels'
(默认) | 'normalized'
| 'inches'
| 'centimeters'
| 'points'
| 'characters'
测量单位,指定为下表中的值之一。
单位值 | 说明 |
---|---|
'pixels' (默认值) | 像素。从 R2015b 起始,以像素为单位的距离不再依赖 Windows® 和 Macintosh 系统上的系统分辨率:在 Windows 系统上,一个像素是 1/96 英寸。在 Macintosh 系统上,一个像素是 1/72 英寸。在 Linux® 系统上,一个像素的大小由系统分辨率确定。 |
'normalized' | 这些单位依据父容器进行归一化。容器的左下角映射到 (0,0) ,右上角映射到 (1,1) 。 |
'inches' | 英寸。 |
'centimeters' | 厘米。 |
'points' | 磅。1 磅等于 1/72 英寸。 |
'characters' | 这些单位基于默认系统字体字符大小。字符宽度 = 字母 x 的宽度。字符高度 = 两个文本行的基线之间的距离。 |
MATLAB 从父对象的左下角测量所有单位。
此属性会影响 Position
属性。如果更改单位,则比较好的做法是在完成计算后将其恢复为默认值,以便不影响其他假定 Units
为默认值的函数。
指定 Units
和 Position
属性的顺序具有以下影响:
- 如果在
Position
属性之前指定Units
,则 MATLAB 会使用指定的单位来设置Position
。 - 如果在
Position
属性之后指定Units
属性,则 MATLAB 会使用默认的Units
来设置 position。然后,MATLAB 将Position
值转换为使用用户指定的单位的等价值。
(8)字体的样式
FontName
- 用于显示控件文本的字体【'Helvetica'
(默认) | 字符串】
FontSize
- 控件文本的字体大小【正数】
FontUnits
- 控件文本的字体大小单位【'points'
(默认) | 'normalized'
| 'inches'
| 'centimeters'
| 'pixels'
】
FontWeight
- 控件文本的字体粗细 【'normal'
(默认) | 'bold'
】
FontAngle
- 控件文本的字符倾斜 【'normal'
(默认) | 'italic'
】
【3】回调函数
(1)BusyAction
- 回调中断响应函数
Note:'queue'
(默认) | 'cancel'
BusyAction
属性决定 MATLAB 如何处理中断回调的执行。有以下两种回调状态要考虑:
- 运行中回调是当前正在执行的回调。
- 中断回调是试图中断运行中回调的回调。
中断回调的来源的 BusyAction
属性决定 MATLAB 如何处理其执行。BusyAction
属性具有下列值:
'queue'
- 将中断回调放入队列中,以便在运行中回调执行完毕后进行处理。'cancel'
- 不执行中断回调。
无论何时 MATLAB 调用回调,该回调都会试图中断正在执行的回调。运行中回调所属对象的 Interruptible
属性确定是否允许回调。如果 Interruptible
设置为:
on
- 在下一个时间点(MATLAB 处理队列时)发生中断。这是默认设置。off
-BusyAction
属性(中断回调所属对象的属性)确定 MATLAB 是将中断回调纳入队列还是将其忽略。
(2)ButtonDownFcn
- 按下鼠标按钮回调函数
Note:''
(默认) | 函数句柄 | 元胞数组 | 字符串
按下鼠标按钮回调函数,指定为下列值之一:【以下几个回调函数的可设置值相同】
- 函数句柄
- 第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参数。
- 作为有效 MATLAB 表达式的字符串。MATLAB 在基础工作区中计算此表达式。
ButtonDownFcn
是一个当用户在控件上点击鼠标按钮时执行的函数。回调在以下情形下执行:
- 用户右键点击控件,并且控件
Enable
属性设置为'on'
。 - 最终用户右键点击或左键点击控件,并且控件 Enable
属性设置为
’off’或
‘inactive’`。
(3)Callback
- 用户与控件交互时执行的回调函数
Note:''
(默认) | 函数句柄 | 元胞数组 | 字符串
此函数使控件响应用户输入,例如按钮点击、滑动条移动或复选框选中。
(4)CreateFcn
- 控件创建函数
Note:函数句柄 | 元胞数组 | 字符串
该属性指定要在 MATLAB 创建 uicontrol 时执行的回调函数。MATLAB 在执行 CreateFcn
回调之前初始化所有的控件属性值。如果不指定 CreateFcn
属性,则 MATLAB 执行默认的创建函数。
在CreateFcn
代码中使用 [gcbo
] 函数可以获得创建的控件的句柄。
对现有控件设置 CreateFcn
属性没有任何作用。
(5)DeleteFcn
- 控件删除函数
Note:函数句柄 | 元胞数组 | 字符串
DeleteFcn
属性指定要在 MATLAB 删除控件时(例如,最终用户删除图形时)执行的回调函数。MATLAB 在销毁控件的属性之前执行 DeleteFcn
回调。如果不指定 DeleteFcn
属性,则 MATLAB 执行默认的删除函数。
在 DeleteFcn 代码中使用 gcbo 函数以获得删除的控件的句柄。
(6)Interruptible
- 回调中断
Note:'on'
(默认) | 'off'
Interruptible
属性确定是否可以中断运行中回调,有以下两种回调状态要考虑:
- 运行中回调是当前正在执行的回调。
- 中断回调是试图中断运行中回调的回调。
无论何时 MATLAB 调用回调,该回调都会试图中断运行中回调。运行中回调所属对象的 Interruptible
属性决定着是否允许中断。如果不允许中断,则拥有中断回调的对象的 BusyAction
属性将确定是放弃该回调还是将回调放入队列中。
如果控件回调是运行中回调,则 Interruptible
属性将决定它是否可以被另一回调中断。Interruptible
属性具有下列两个可能的值:
-
‘on’ - 运行中回调可以被另一个回调中断。中断发生在 MATLAB 处理队列的下一个位置,例如当存在 drawnow、figure、getframe、waitfor 或 pause 时。
- 如果运行中回调包含以上命令之一,则 MATLAB 将在此时停止执行回调并执行中断回调。当中断回调完成时,MATLAB 将恢复执行运行中回调。
- 如果运行中回调不包含以上命令之一,则 MATLAB 执行完当前回调,不会出现任何中断。
-
'off'
- 一个回调不能中断运行中回调。MATLAB 在不发生任何中断的情况一直将运行中回调执行完成。这是默认行为。 -
附注: 回调的中断和执行在以下情况下会有不同的表现:如果中断回调是 DeleteFcn、CloseRequestFcn 或 SizeChangedFcn 回调,则无论是否存在 Interruptible 属性值都会发生中断。如果运行中回调当前正在执行 waitfor 函数,则无论是否存在 Interruptible 属性值都会发生中断。发生中断时,MATLAB 不保存属性状态或显示内容。例如,gca 或 gcf 命令返回的句柄可能会在另一回调执行时发生改变。
【4】状态信息
(1)Value
控件的当前值,指定为数字。Value
属性可用于查询或修改某些控件的状态:
控件的样式 | 值属性的描述 |
---|---|
'togglebutton' | 抬起:Value 属性等于 Min 属性的值。按下:Value 属性等于 Max 属性的值。 |
'checkbox' | 取消选中:Value 属性更改为 Min 属性的值。选中:Value 属性更改为 Max 属性的值。 |
'radiobutton' | 取消选择:Value 属性更改为 Min 属性的值。已选择:Value 属性更改为 Max 属性的值。 |
'slider' | Value 属性等于对应的滑动条值。 |
'listbox' | Value 属性等于与列表框中的选定项对应的数组索引。值 1 对应于列表中的第一个项目。 |
'popupmenu' | Value 属性等于与弹出式菜单中的选定项对应的数组索引。值 1 对应于弹出式菜单中的第一项。 |
(2)Max
控件的最大值,指定为数字,默认值为1。Max
属性影响某些控件的表示形式:
控件的样式 | 值属性的描述 |
---|---|
'togglebutton' | 按下切换按钮时,Value 属性更改为 Max 属性的值。 |
'checkbox' | 当选中复选框时,Value 属性更改为 Max 属性的值。 |
'radiobutton' | 当选择单选按钮时,Value 属性更改为 Max 属性的值。 |
'edit' | 当 Max – Min > 1 时,编辑文本框接受多行输入。否则,编辑文本框接受单行输入。Max 和 Min 的绝对值不影响可能的行数。只要差异大于 1 ,则编辑框可以包含任意行数。 |
'slider' | Max 属性值是滑动条最大值,该值必须大于 Min 属性值。 |
'listbox' | Max 属性值可帮助确定用户是否可同时选择列表框中的多个项目。如果 Max – Min > 1,则用户可以同时选择多个项目。否则,用户不能同时选择多个项目。如果设置 Max 和 Min 属性以允许多个选择,则 Value 属性值可以是索引矢量。 |
(3)Min
控件的最小值,指定为数字,默认值为0。Min
属性影响某些控件的表示形式,基本与Max的相反:
控件的样式 | 值属性的描述 |
---|---|
'togglebutton' | 抬起切换按钮时,Value 属性更改为 Min 属性的值。 |
'checkbox' | 当取消选中复选框时,Value 属性更改为 Min 属性的值。 |
'radiobutton' | 当取消选择单选按钮时,Value 属性更改为 Min 属性的值。 |
'edit' | 当 Max – Min > 1 时,编辑文本框接受多行输入。否则,编辑文本框接受单行输入。Max 和 Min 的绝对值不影响可能的行数。只要差异大于 1 ,则编辑框可以包含任意行数。 |
'slider' | Min 属性值是滑动条最小值,该值必须小于 Max 属性值。 |
'listbox' | Max 属性值可帮助确定用户是否可同时选择列表框中的多个项目。如果 Max – Min > 1,则用户可以同时选择多个项目。否则,用户不能同时选择多个项目。如果设置 Max 和 Min 属性以允许多个选择,则 Value 属性值可以是索引矢量。 |
(4)ListboxTop
列表框中顶部项的索引,指定为整数值,默认值为1。此属性仅适用于控件样式的列表框。此属性指定哪个字符串显示在列表框中的最顶部位置,该列表框不够大,无法显示所有列表项。ListboxTop
值是您指定为String
属性值的字符串数组的索引。ListboxTop
值必须介于 1
和数组中的字符串数之间。非整数值固定为下一最小整数。
- 附注:
String
和Value
属性可能覆盖ListboxTop
属性,而不管所指定的ListboxTop
值为何。ListboxTop
值可能随其他控件属性的值而变。例如,显式设置Value
属性可将列表滚动到该值。为获得最可靠的结果,请在当 MATLAB 在屏幕上绘制完控件后查询或修改ListboxTop
属性。
结束
总得看下来,整篇相对来说比较理论化,理解起来可能抽象些,但是这些都是后续设计GUI实例的基础,虽然没咋学也能够设计一些简单实例,但是没有顺手的感觉,所以还是很有必要花点时间把这篇的内容理一下。