GUI编程之MATLAB入门详解(01)
⛄前言
图形用户界面的设计是MATLAB的核心应用之一。当用户与计算机之间或用户与计算机程序之间进行交互操作时,舒服高效的用户接口功能则会对用户产生极大的吸引力。图形用户界面(GUI)则通过窗口、图标、按钮、菜单、文本等图形对象构成用户界面。
MATLAB为用户构建应用程序提供了两个平台——GUIDE和App Designer。
GUIDE是一个较老的平台,MATLAB用户已经使用了很多年。尽管用户已经能够使用GUIDE构建不同复杂程度的应用程序,但是它一直存在用户希望解决的工作流程和可用性问题。类似地,它所支持的组件集(主要是uicontrol集)也非常有限,并且基于一些遗留的技术。
App Designer作为新的应用程序构建平台,在R2016a中引入。它集成了构建应用程序的两个任务——设置视觉组件和编程行为。它具有一个新的设计画布,更容易添加组件,并使用标签和面板进行有效组织。它包括一个内置的编辑器,用于管理只读部分中组件的生成代码,并为用户编写的回调代码提供可编辑的部分。它还支持一系列新的标准组件,如编辑字段、按钮和旋转器,以及用于创建仪表面板的仪表盘、旋钮、开关和灯。
GUIDE和App Designer之间的主要区别在于所使用的技术。GUIDE的基础是Java Swing,甲骨文已经不再对其投入开发。虽然该平台可以获得一些短期的胜利,但从长远来看,不会得到新的扩展,也不允许我们为用户提供基于网络的工作流。AppDesigner建立在现代的基于web技术上,比如JavaScript、HTML和CSS,它给我们提供了一个平台,可以灵活地跟上用户的需求,并允许应用程序在web上运行。用户可以保持他们现有的基于Java的应用程序运行,并在合适的时候选择新的平台。
Swing 是一个为Java设计的GUI工具包。
Swing是JAVA基础类的一部分。
Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
本博客以GUIDE的相关教程为例子进行阐述,App Designer相关教程待后续更新。
⛄Matlab图形用户界面
句柄图形(Handle Graphics)系统是MATLAB中一种面向对象的绘图系统,该系统提供创建计算机图形所必需的各种功能,包括创建线、文字、网格、面及图形用户界面等。图形用户对象包括了众多的GUI对象,其中基本的图形用户界面对象分为3类:
-
用户界面控件对象(
uicontrol
) -
下拉式菜单对象(
uimenu
) -
内容式菜单对象(
uicontextmenu
)
在图形用户对象中,包括多个图形用户对象及多个图形用户接口容器对象,这些容器对象可以成为图形用户对象或其他容器的接口容器。利用上述对象进行周密的组织、设计,就可以设计出一个界面良好、操作方便、功能强大的图形用户界面。 GUI图形对象之间的层次树表如下图所示:
⛄图形用户界面控件
在绝大多数的图形用户界面下,都包含控件。控件是图形对象,它与菜单一起用于创建图形用户界面。通过使用各种类型的控件,可以建立操作简便、功能强大的图形用户界面。MATLAB R2018a的控件对象如下表所示:
控件对象类型 | 说明 |
---|---|
Push Button | 按钮:在按钮上通常显示文本标签。当用户在按钮上单击时,可以使系统MATLAB R2018a的回调函数执行某个操作,但不能用于属性或状态的选择。按钮按下后,可以恢复到原来的弹起状态。 |
slider | 滑动框:和其他编程语言中的滑动条一样,由滑杆、指示器等部分对象组成。滑动框通常用于从一个数据范围中选择一个数据值。滑动框通常和其他的文本对象一起使用,用来表示滑动框的标题、当前值及滑动框的范围等。 |
Radio Button | 单选按钮:通常通过一个文本标签和一个圆圈或菱形构成组件,当选中时,该圆圈或菱形会处于填充状态;而取消选中时,圆圈和菱形则会恢复到无填充状态。单选按钮选择时,通常只能从一组选择对象中选择单个对象。 |
Check Box | 复选框:每个复选框对象由复选项和相应的标签对象构成。当复选项选择激活后,复选框中会出现“×”;取消复选后,则会消失。 |
Edit Text | 文本编辑框:用户可以动态地修改或替换文本框中的内容。对于文本框对象,用户可以在属性中设置单行或多行文本输入属性。如果设置为单行文本输入,用户只能输入一行文本,按Enter键后表明输入结束;如果设置为多行文本输入,用户可以输入多行文本,换行时需按Ctrl+Enter组合键。 |
Static Text | 静态文本:用于显示文本字符串,通常用于显示标题、标签、用户信息和当前值。此时,用户不能对显示的文本进行修改和编辑。 |
Pop-up Menu | 弹出式菜单:用户可以从弹出式菜单的多个选项中选择一个选项。当关闭菜单选项时,将会成为一个包含用户选择项的矩形或按钮,位于一定的矩形区域内。有些菜单项中还有其他子菜单选项,同样的方式可以用鼠标完成选择过程。 |
Listbox | 列表框:产生的文本条目可以用于选择,但不能进行编辑。 |
Toggle Button | 开关按钮:创建切换。和普通按钮不同,开关按钮通常会交替呈现两种不同的状态(弹起或按下)。而普通按钮将会在按下后立即弹起。开关按钮和普通按钮一样,每次单击都会产生相应的操作。 |
Table | 表格按钮:创建表格组件。具体使用可参见uitable函数。 |
Axes | 坐标系:用于在GUI中添加图形或图像。 |
Panel | 面板:用于将GUI中的控件分组管理和显示。使用面板将相关控件分组显示可以使软件更易于理解。面板可以包含各种控件,包括按钮、坐标系及其他面板等。面板包含标题和边框等用户显示面板的属性和边界。面板中的控件与面板之间的位置为相对位置,当移动面板时,这些控件在面板中的位置不改变。 |
Button Group | 按钮组:按钮组类似于面板,但是按钮组的控件只包括单选按钮或者开关按钮。按钮中的所有控件,其控制代码必须写在按钮组的SelectionChangeFcn响应函数中,而不是用户接口控制响应函数中。按钮组会忽略其中控件的原有属性。 |
ActiveX Control | ActiveX控件:用于在GUI中显示控件。该功能只有在Windows操作系统下可用。 |
👀图形用户界面控件的创建
MATLAB R2018a提供了命令行和GUI设计工具两种方式来创建图形用户界面控件。
(1)命令行方式
在命令行方式下,可以通过函数uicontrol来建立控件对象。ucontrol函数有如下几种调用格式:
Handle = uicontrol(parent)
Handle = uicontrol(..., 'PropertyName', PropertyValue, ...)。
其中,Handle是创建的控件对象的句柄值;parent是控件所在的图形窗口的句柄值;PropertyName是空间的某个属性的属性名;PropertyValue 是与属性名相对应的属性值。第一种调用方式,采用uicontrol的Style属性的默认属性值,在图形窗口的左下角创建一个命令按钮。第二种调用方式,省略控件所在图形窗口的句柄值,表示在当前图形窗口创建控件对象。如果此时无图形窗口,MATLAB会自动创建一个图形窗口,然后在其中创建控件对象。
% 创建一个命令按钮,其位置在[0.5 0.5 0.2 0.1],单位是 normalized。当单击该命令按钮时,按钮的位置会随机变动。
>>h = uicontrol('style', 'pushbutton', 'Units', 'normalized', 'Position', [.5 .5 .2 .1], 'String', '单击此处', 'Callback', 'set(h,''Position'', [.8*rand .9*rand .2 .1])');
(2)GUI设计工具
在命令行方式下创建控件对象时,需要记住用于创建控件对象的函数。而且要设置控件的属性,必须记住控件的大量属性的属性名,这对于修改控件的属性非常不便。在MATLAB R2018a中利用GUI设计工具中的对象设计编辑器(Layout Editor),可以很容易地创建MATLAB支持的各种控件,而且通过对象属性检查器(Property Inspector)可以方便地修改、设置创建的控件的属性值。利用GUIDE创建GUI的流程包括:
-
在命令行中输入
guide
打开GUIDE
; -
在弹出"GUIDE快速入门"窗口中,选择新建GUI(如果要修改已经做好的GUI界面,选择打开现有GUI),将保存路径前面的勾打上,然后点击浏览,选择想要保存的路径以及修改文件名,最后点击确定即可;
MATLAB为GUI设计提供了4种模板,分别是:Blank GUI(空白模板,默认)、GUI with Uicontrols(带控件对象的GUI模板)、GUI with Axes and Menu(带坐标轴和菜单的GUI模板)、Modal Question Dialog(带模式问题对话框的GUI模板),可以根据需要选择创建。
-
弹出"GUI设计窗口",同时会生成两个相同文件名的文件,后缀分别为"
.fig
"和".m
"; -
在"GUI设计窗口"中,左半部分为设计工具区,提供了设计GUI过程中所用的用户控件;中间网格形式是用户设计GUI的操作区域;
GUI设计窗口中,选择"文件"——“预设”,在弹出的"预设项"设置对话框中选择"在组件选项板中显示名称",点击"确认",则GUIDE界面中的交互控件面板将会显示各控件的名称。
-
在"GUI设计窗口"创建控件对象后,可以通过双击该控件对象来显示该对象的属性编辑器;
-
编辑GUI对应的m文件,右击某个控件对象,选择查看回调,再选择callback;进入m文件的编辑界面,找到对应控件对象的callback函数,对其进行编辑;
-
在"GUI设计窗口"的
.fig
中,点击运行,即可执行新建的GUI界面。
👀鼠标动作执行
在GUI方式下的应用程序最主要的输入设备就是鼠标,利用鼠标做出判断和交互动作。事实上,如今任何图形界面应用程序与操作系统都提供了对鼠标操作的支持。MATLAB也提供了对图形用户界面下应用程序鼠标操作的支持。
在MATLAB中,所有句柄图形对象都拥有一个ButtonDownFcn属性,大部分UI对象也都拥有Callback属性,对于uicontrol对象还拥有KeyPressFcn属性。图形对象则拥有如WindowButtonDownFcn、 WindowButtonUpFcn、 WindowButtonMotionFcn、KeyPressFcn、CloseRequestFcn及ResizeFcn属性。此外,所有的图形对象还拥有CreateFcn和DeleteFcn属性。这些属性值都是一个回调字符串,当这些属性激活时,鼠标光标的位置将会决定事件发生时的回调和执行函数。鼠标光标位于不同的对象时,所能触发该对象的回调函数及响应结果如下表:
鼠标光标位置及其它条件 | 响应事件 |
---|---|
鼠标光标位于uimenu菜单项上,菜单项的Enable属性设置为on | 改变uimenu对象的外观并为鼠标释放事件做好准备 |
鼠标光标位于uicontrol对象上,且该对象的Enable属性设置为on | 改变uicontrol对象的外观并为鼠标释放事件做好准备 |
鼠标光标位于uimenu菜单项上,菜单项的Enable属性设置为off | 忽略鼠标键按下事件 |
鼠标光标位于uicontrol对象上,该对象的Enable属性设置为off或inactive | 首先执行WindowButtonDownFcn回调函数,然后执行uicontrol对象的ButtonDownFcn回调代码 |
鼠标光标位于除uimenu和uicontrol对象之外的其他图形对象上或附近 | 首先执行图形对象WindowButtonDownFcn回调函数代码,然后执行鼠标所指对象的ButtonDownFcn回调函数代码 |
鼠标光标位于图形对象的内部,但不在其他对象上或附近 | 首先执行图形对象WindowButtonDocn回调函数代码,然后执行该对象的ButtonDownFcn回调函数代码 |
在选择执行回调函数时,MATLAB R2018a通常会根据图形中的区域来决定回调函数的执行和选择。
- 在选择时,通常根据3个区域来进行选择;
- 当鼠标光标位于句柄图形对象的Position属性确定的范围内时,即可认为鼠标光标位于该对象上;
- 如果鼠标光标没有位于对象之上,但位于对象的有效选择区域之内,那么可以认为鼠标光标位于该对象附近;
- 如果鼠标光标既不在一个对象上,也不在一个对象附近,那么鼠标光标远离该对象;
- 当对象或选择区域出现重叠时,通常会利用对象的叠放次序来确定哪一个对象被鼠标选中。
如果在鼠标光标附近的uimenu、uicontextmenu、uicontrol对象的Enable属性被设置为on,那么鼠标单击过程将会触发对象的Callback属性字符串的执行。
当按下鼠标时,uicontrol对象将会做好被触发的准备,通常会改变uicontrol对象或uimenu的外观,释放鼠标,则会触发相应的回调函数执行过程。如果鼠标光标不在一个uicontrol对象或uimenu对象上,那么将会按照鼠标按下和鼠标释放过程来执行。
当鼠标释放时,系统将会产生一个鼠标释放事件。当该事件发生时,图形对象的CurrentPoint属性首先更新,同时图形对象的WindowButtonUpFcn回调函数代码被触发执行。
如果鼠标光标在图形对象的内部移动,将会产生鼠标光标的移动事件。当该事件发生时,图形的CurrentPoint属性将会被更新,同时图形的WindowButtonMotionFcn回调函数将会被触发执行。
👀事件队列的执行顺序
创建图形用户界面后,用户可以通过任意方式与该图形用户界面产生交互操作。在进行交互操作的过程中,每次交互都会产生一个事件,这些事件将会形成一系列的事件序列。同时,图形窗口的输入和输出事件也将会作为图形用户界面对象的事件被列入事件队列中。列入事件队列中的事件包括鼠标光标的移动和触发回调执行的鼠标按键按下或释放操作,以及waitforbuttonpress、waitfor、drawnow、figure、getframe、pause等事件,这些事件在需要处理的事件队列中会按照顺序依次执行和操作。一般情况,终止回调函数代码的执行过程是不允许的,但在优先级较高的命令如waitforbuttonpress、waitfor、drawnow、getframe、pause或figure等执行时,系统将会把执行过程中的回调函数代码挂起,并检测事件队列中未完成的每个事件。
如果将回调函数相应对象的Interruptible属性设置为on,那么在系统处理完所有未完成事件后,将会恢复被挂起的回调过程,并执行完毕。如果将该属性设置为off,那么系统将会只处理没有完成的屏幕刷新事件。
如果对象的BusyAction属性设置为cancel,那么中断回调执行的事件将会被忽略。如果将该属性设置为queue,那么中断回调执行的事件将会被保存在队列中,直到被中断的回调函数执行完毕后再响应该事件。
👀回调函数的编写
在图形用户界面编写的过程中,使用句柄图形和图形用户界面函数可以充分利用回调函数的代码编写来扩展用户选择的任务执行过程。在执行回调函数的过程中,可以将回调函数设置为回调函数字符串,然后将这些回调字符串传递给eval函数来完成执行过程。
当图形用户对象运行执行回调函数代码时,将会根据该函数来进行函数代码的回调执行过程。如果有多个回调函数需要执行,则可以把这些回调过程编写为switch切换结构来完成回调执行过程。但通过这种方法来编写回调函数代码时,数据的获取和传递将是需要解决的一个重要问题。如可以使用persistent声明来限定数据。通过persistent函数进行限定时,工作区中所存储的该数据将会在函数执行过程中被使用。但如果有多个图形用户界面对象存在,那么多个图形用户界面对象将共享该persistent数据。
传递数据也可通过句柄图形对象的tag属性来进行。由于句柄图形对象的tag属性是句柄图形对象的唯一标识字符串,用户可以使用findobj函数来寻找指定tag字符串的图形用户对象。当找到该对象后,可以通过getappdata、setappdata、rmappdata和isappdata函数来对所得到的对象数据进行处理。
数据函数 | 说明 |
---|---|
Value=getappdata(h, name) | 获得应用程序中定义的数值 |
setappdata(h, name, value) | 设置应用程序中的数值 |
rmappdata(h, name) | 删除应用程序中的数值 |
isappdata(h, name) | 判断是否为句柄函数值 |
⛄对话框对象
在GUI程序设计中,对话框是最重要的显示信息和取得用户数据的用户界面对象。对话框一般包含一个或多个按钮以供用户输入或者弹出显示的信息,由用户决定要采取的措施。在绝大部分的程序设计软件中,如Visual Basic、Delphi、Visual C++,都可以方便地进行对话框设计。MATLAB也提供了一些进行对话框设计的有用函数。使用对话框,可以使图形用户界面更加友好,易于为用户理解。总的来说,MATLAB R2018a中的对话框分为两大类,第一类是公共对话框,第二类是一般对话框。
👀公共对话框
常用的公共对话框函数如下表所示:
对话框函数 | 说明 |
---|---|
uigetfile | 标准的打开对话框 |
uiputfile | 保存文件对话框 |
uisetfont | 生成字体和字体属性选择对话框 |
uisetcolor | 颜色设置对话框 |
pagesetupdlg | 页面设置对话框 |
printpreview | 打印预览对话框 |
printdlg | 打印对话框 |
(1)文件打开对话框
文件打开对话框用于打开某个文件。在Windows系统中,几乎所有应用软件都提供文件打开对话框。在MATLAB中,调用文件打开对话框的函数为uigetfile。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
uigetfile | 在显示的文件打开对话框中,列出当前目录下MATLAB能识别的所有文件 |
uigetfile(‘FilterSpec’) | 在显示的文件打开对话框中,列出当前目录下由参数FilterSpec指定的类型文件。参数FilterSpec是一个文件类型过滤字符串,用于指定要显示的文件类型。例如,'*.m’显示当前目录下MATLAB中的所有M文件 |
uigetfile(‘FilterSpec’, ‘DialogTitle’) | 与第二种调用格式基本相同,只是该调用格式设定了文件打开对话框的标题名,默认标题为字符串Select file to open |
uigetfile(‘FilterSpec’, ‘DialogTitle’, x, y) | 与第三种调用格式基本相同,只是该调用格式还指定了对话框显示时的位置。显示位置由参数x与y决定。x、y是从屏幕左上角算起的水平与垂直距离。距离单位是像素 |
[fname,pname]=uigetfile(…) | 返回打开文件的文件名与路径。其中,输入参数fname存放的是打开的文件名,pname包含文件的路径 |
(2)文件保存对话框
文件保存对话框用于保存某个文件。在MATLAB中,调用文件保存对话框的函数为uiputfile。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
uiputfile | 显示用于保存文件的对话框,列出当前目录下MATLAB能识别的所有文件 |
uiputfile(‘InitFile’) | 在显示的文件保存对话框中,列出当前目录下由参数InitFile指定的类型文件。参数InitFile是一个文件类型过滤字符串,用于指定要保存的文件类型。例如,'*.m’显示当前目录下 MATLAB 中的所有 M 文件 |
uiputfile(‘InitFile’, ‘DialogTitle’) | 与第二种调用格式基本相同,只是该调用格式设定了文件保存对话框的标题名,默认标题为字符串 Select file to write |
uiputfile(‘InitFile’, ‘DialogTitle’, x, y) | 与第三种调用格式基本相同,只是该调用格式还指定了对话框显示时的位置。显示位置由参数x与y决定。x、y是从屏幕左上角算起的水平与垂直距离。距离单位是像素 |
[fname,pname]=uiputfile(…) | 返回保存的文件的文件名与路径。其中,输入参数fname存放的是保存的文件名,pname 包含文件的路径 |
(3)颜色设置对话框
颜色设置对话框可用于交互式设置某个图形对象的前景色或背景色。在绝大部分的程序设计软件中,都提供了这个公共对话框。在MATLAB中,调用颜色设置对话框的函数为uisetcolor。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
c=uisetcolor(h_or_c, ‘DialogTitle’) | 输入参数中的h_or_c可以是一个图形对象的句柄,也可以是一个三色RGB向量。若是图形对象的句柄,那么该图形对象必须有一个颜色属性;若是三色RGB向量,那么输入的必须是一个有效的RGB向量,此时输入的颜色初始化颜色对话框。对于输入的参数是图形对象句柄,颜色对话框被初始化为黑色。输入参数中的DialogTitle字符串用于标明颜色对话框的标题名。输出参数c返回用户选择的RGB向量值 |
(4)字体设置对话框
字体设置对话框可用于交互式修改文本字符串、坐标轴或控件对象的字体属性。修改的字体属性包括FontName、FontUnits、FontSize、FontWeight、FontAngle等。在MATLAB中,调用字体设置对话框的函数为 uisetfont。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
uisetfont | 显示用于进行字体设置的对话框,对话框中列出了字体、字形、字体大小等字段。返回的是选择的字体的属性值 |
uisetfont(‘DialogTitle’) | 与第一种调用格式基本相同,只是该调用格式设定了字体设置对话框的标题名,默认标题为字符串Font |
uisetfont(h) | 输入参数h是一个对象句柄。该调用格式用对象句柄中的字体属性值初始化字体设置对话框中的属性值,用户可以利用字体设置对话框重新设置对象的字体属性值。返回重新设置后的字体的属性值 |
uisetfont(h, ‘DialogTitle’) | 与第三种即uisetfont(h)的调用格式基本相同,只是该调用格式还设定了字体设置对话框的标题名,默认标题为字符串Font |
uisetfont(S) | 输入参数S是一个字体属性结构,是一个或多个下列属性的合法值:FontName、FontUnits、FontSize、FontWeight、FontAngle,否则输入值会被忽略。该调用格式用字体属性结构S中的成员值来初始化字体设置对话框中的属性值。用户可以利用字体设置对话框重新设置对象的字体属性值。返回重新设置后的字体的属性值 |
uisetfont(S, ‘DialogTitle’) | 与第五种即uisetfont(S)的调用格式基本相同,只是该调用格式还设定了字体设置对话框的标题名,默认标题为字符串Font |
S = uisetfont(…) | 返回字体属性(FontName、FontUnits、FontSize、FontWeight、FontAngle)的属性值,被保存在结构S中 |
(5)打印页面设置对话框
打印页面设置对话框可用于对打印输出时的页面进行设置。在许多应用软件中,都提供了进行打印页面设置的对话框。在MATLAB中,调用打印页面设置对话框的函数为pagesetupdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
dlg=pagesetupdlg(fig) | 用默认的页面设置属性为图形窗口创建一个打印页面设置对话框。输入参数fig必须是单个图形窗口的句柄,而不是一个图形窗口向量。若省略参数fig,那么默认的图形窗口对象是当前窗口对象。输出参数返回已设置了的打印页面属性值 |
在MTALAB R2018a中,pagesetupdlg函数被打印预览对话框函数printprview合并。
(6)打印预览对话框
打印预览对话框用于对打印输出的页面进行预览。在许多应用软件中,都提供了打印预览的对话框。在MATLAB中,调用打印预览对话框的函数为printpreview。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
printprview | 显示当前图形窗口对象的打印预览对话框 |
printprview(fig) | 显示指定的图形窗口对象fig的打印预览对话框 |
在打印预览对话框的上面有相应的分组按钮控件,用户可以进行相应的编辑控制操作。
(7)打印对话框
打印对话框是专门进行打印的对话框,这是任何图形用户界面的应用软件都会提供的对话框。在MATLAB中,调用打印对话框的函数为printdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
printdlg | 显示出标准的Windows打印对话框(在Windows系统中)。它打印当前图形窗口内的图形对象 |
printdlg(fig) | 显示出标准的Windows打印对话框(在Windows系统中),但它打印由输入参数fig指定的图形窗口内的对象。输入参数fig是将要打印的图形窗口的句柄 |
printdlg(‘-crossplatform’, fig) | 显示标准的crossplatform模式的MATLAB打印对话框。输入参数fig是将要打印的图形窗口的句柄 |
printdlg(‘-setup’, fig) | 显示打印对话框的开始模式。在这里有可以不进行打印而设置的默认选项 |
👀一般对话框
除了提供大量标准的公共对话框,MATLAB R2018a还提供了大量的一般对话框函数:
对话框函数 | 说明 |
---|---|
helpdlg | 帮助对话框 |
errordlg | 错误消息对话框 |
msgbox | 信息提示对话框 |
questdlg | 询问对话框 |
warndlg | 警告消息显示对话框 |
inputdlg | 变量输入对话框 |
listdlg | 列表选择对话框 |
axlimdlg | 生成坐标轴范围设置对话框 |
dialog | 创建对话框或图形用户对象类型的图形窗口 |
menu | 菜单类型的选择对话框 |
waitbar | 显示等待进度条 |
(1)帮助对话框
在操作应用软件时,当用户不知道该如何操作时,帮助信息将会帮助用户进行正确操作,显示帮助信息的对话框就是帮助对话框。MATLAB提供的创建帮助对话框的函数是helpdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
helpdlg | 创建一个默认的帮助对话框。默认的对话框名为"Help Dialog",在对话框内包含一个名为"This is the default help string"的字符串 |
helpdlg(‘helpstring’) | 创建一个帮助对话框。该对话框仍然叫作"Help Dialog",但对话框内显示的帮助信息由输入参数helpstring决定 |
helpdlg(‘helpstring’, ‘dlgname’) | 创建一个帮助对话框。该对话框的名称由输入参数dlgname决定,对话框内显示的帮助信息由输入参数helpstring决定 |
h = helpdlg(…) | 返回创建的帮助对话框的句柄,句柄存放在输入参数h中,输入参数与前面的调用格式的输入参数相同 |
MATLAB会自动设置帮助对话框的宽度,使其能够显示出helpstring字符串的全部帮助信息。
(2)错误消息对话框
在开发的应用软件中,当用户进行了错误的操作后,应该显示错误消息对话框,使用户知道错误的原因,以便采取正确的操作。此时,就要用到错误消息对话框。MATLAB提供的创建错误消息对话框的函数是errordlg,该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
errordlg | 创建一个默认的错误消息对话框。默认的对话框名为"Error Dialog",在对话框内包含一个名为"This is the default error string"的字符串 |
errordlg(‘errorstring’) | 创建一个错误消息对话框。该对话框仍然叫作"Error Dialog",但对话框内显示的错误消息由输入参数errorstring决定 |
errordlg(‘errorstring’, ‘dlgname’) | 创建一个错误消息对话框。该对话框的名称由输入参数dlgname决定,对话框内显示的帮助信息由输入参数errorstring决定 |
errordlg(‘errorstring’, ‘dlgname’, ‘on’) | 创建一个错误消息对话框。当要创建的对话框已经存在时,输入参数on把已经存在的对话框显示在屏幕的最前端,而不再创建同名的新对话框 |
h = errordlg(…) | 返回创建的错误消息对话框的句柄,句柄存放在输入参数h中。输入参数与前面的调用格式的输入参数相同 |
MATLAB会自动设置错误消息对话框的宽度,使其能够显示出errorstring字符串的全部错误信息。显示的错误消息对话框的外观依赖于不同的操作系统。
(3)信息提示对话框
在面临多种选择或应该显示某种提示情况时,一般就会显示信息提示,此时就要借助于信息提示对话框。MATLAB提供的创建信息提示对话框的函数是msgbox。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
msgbox(message) | 创建一个信息提示对话框。创建的对话框会自动设置对话框的宽度,使其能够显示出全部提示信息。输入参数message存储的是要显示的提示信息。该参数取值可以是一个字符串向量或字符串矩阵 |
msgbox(message, title) | 创建的信息提示对话框与第一种格式即msgbox(message)创建的对话框基本相同,只是该对话框有一个标题名,标题名由输入参数title决定。参数title是一个字符串 |
msgbox(message, title, ‘icon’) | 创建的信息提示对话框除了包含提示信息与标题名,对话框上还有一些图标。图标由参数icon决定,icon可选的值有none、error、help、warn、custom,默认值是none |
msgbox(message,title, ‘custom’, iconData, iconCmap) | 创建的信息提示对话框中的图标是用户自定义的图标。定义图标的图像数据存放在参数iconData中,定义图像的颜色数据存放在参数iconCmap中 |
Msgbox = (…, ‘createMode’) | 参数createMode用于决定创建的信息提示对话框是模式对话框还是无模式对话框。参数createMode的可选值有modal、non-modal和replace。其中,replace 值用标题名相同的对话框代替另外一个已经打开的对话框 |
H = msgbox(…) | 返回创建的信息提示对话框的句柄,句柄存放在输入参数h中。输入参数与前面的调用格式的输入参数相同 |
(4)询问对话框
当对问题的解决可能存在多种选择时,会显示询问对话框,由用户决定应该采取的步骤。例如,保存文件的文件名与当前目录中存在的某个文件名相同时,会显示询问对话框。MATLAB提供的创建询问对话框的函数是questdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
button = questdlg(‘qstring’) | 创建一个问题显示的模式对话框。该对话框中有3个命令按钮,分别为Yes、No、Cancel。显示的问题由输入参数qstring(字符串类型)决定。输出参数button返回的是用户按下的命令按钮的名字 |
button = questdlg(‘qstring’, ‘title’) | 创建的询问对话框的标题由参数title决定。该标题显示在对话框的标题栏中 |
button = questdlg(‘qstring’, ‘title’, ‘default’) | 创建的询问对话框,当按下Enter键时,返回参数button中的值是参数default设置的值。default 必须是Yes、No、Cancel中的一个 |
button = questdlg(‘qstring’, ‘title’, ‘str1’, ‘str2’, ‘default’) | 创建的询问对话框有两个命令按钮,按钮上显示的字符由参数str1与str2决定。default设置当用户按下Enter键时返回的参数值。default必须是str1、str2中的一个 |
button = questdlg(‘qstring’, ‘title’, ‘str1’, ‘str2’, ‘str3’, ‘default’) | 创建的询问对话框中有3个命令按钮,按钮上显示的字符由参数str1、str2与 str3决定。default设置当用户按下Enter键时返回的参数值。default必须是str1、str2或str3中的一个 |
MATLAB会自动设置询问对话框的宽度,使其能够显示出qstring字符串的全部信息。
(5)警告消息显示对话框
在操作应用软件时,当用户进行了不恰当的操作后,应该显示警告消息显示对话框,使用户知道该操作可能导致错误,以便采取正确的操作。此时,就要用到警告消息显示对话框。MATLAB提供的创建警告消息显示对话框的函数是warndlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
warndlg | 创建一个默认的警告消息显示对话框。默认的对话框名为"warning Dialog",在对话框内包含一个名为"This is the default warning string"的字符串 |
warndlg(‘warnstring’) | 创建一个警告消息显示对话框。该对话框仍然叫作"warning Dialog",警告信息由输入参数warnstring决定 |
warndlg(‘warnstring’, ‘dlgname’) | 创建一个警告消息显示对话框。该对话框的名称由输入参数dlgname决定,对话框内显示的警告信息由输入参数warnstring决定 |
warndlg(‘warnstring’, ‘dlgname’, ‘on’) | 创建一个警告消息显示对话框。当要创建的对话框已经存在时,输入参数on把已经存在的对话框显示在屏幕的最前端,而不再创建同名的新对话框 |
H = warndlg(…) | 返回创建的警告消息显示对话框的句柄,句柄存放在输入参数h中。输入参数与前面的调用格式的输入参数相同 |
MATLAB会自动设置警告消息显示对话框的宽度,使其能够显示出warnstring字符串的全部警告信息。显示的警告消息对话框的外观依赖于不同的操作系统。
(6)变量输入对话框
在许多应用软件中,当需要用户输入变量时,就会显示一个输入对话框。MATLAB提供的创建变量输入对话框的函数是inputdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
answer = inputdlg(prompt) | 创建一个模式变量输入对话框。输入参数是提示输入信息的字符串。返回值answer存储用户输入的变量值 |
answer = inputdlg(prompt, title) | 创建的模式变量输入对话框的标题名由参数title决定。该参数是一个字符串 |
answer = inputdlg(prompt, title, lineNo) | 创建的模式变量输入对话框中用于输入变量的可编辑文本框的行数由lineNo决定。该参数可以是标量、列向量或矩阵。lineNo的默认值是1。有多个可编辑文本框时,用户输入的值都存储在参数answer中,只是此时要求answer是一个向量值 |
answer = inputdlg(prompt, title, lineNo, defAns) | 创建的变量输入对话框的每个可编辑文本框中的默认值由参数defAns决定。defAns的值就显示在每个可编辑文本中。参数defAns是一个字符向量,其元素的个数必须与参数prompt中元素的个数相等 |
answer = inputdlg(prompt, title, lineNo, defAns, Resize) | 输入参数用于决定创建的变量输入对话框的大小能否被调整。若取值是字符串on,那么创建的对话框的大小可以被调整;若取值是字符串off,那么创建的对话框的大小不能被调整 |
% 创建一个变量输入对话框,可以输入一个整数与一个颜色名。第一个可编辑文本框的行数为2行,其默认值为20;第二个可编辑文本框的行数是4行,其默认值是HSV。
prompt = {'输入矩阵大小:','输入色彩模型名:'};
title = '输入标题';
lines = [2 4];
def = {'20','HSV'};
answer = inputdlg(prompt,title,lines,def);
(7)列表选择对话框
当存在多个选项时,最好提供给用户一个列表框,把所有可能的选项都列出来,使用户能从中选择一个需要的值。在这种情况下就要用到列表选择对话框。MATLAB提供的创建列表选择对话框的函数是listdlg。该函数的调用格式如下表所示:
格式 | 说明 |
---|---|
[Selection, ok] = listdlg(‘ListString’, S, …) | 创建一个列表选择模式对话框。从列表框中可以选择一个或多个列表项。输出变量是一个向量,存储的是选择的列表项的索引号。在单模式选择状态下,它的长度是1。当输出变量OK是0时,变量Selection是空向量[]。若用户单击列表选择对话框中的OK按钮,则输出变量OK值是1;若单击该对话框中的Cancel按钮或关闭列表选择对话框,则输出变量OK值是0。双击选择的列表项或选中列表项,然后单击对话框中的OK按钮,其效果一样。在多模式选择状态下,单击对话框中的Select all按钮,可以选择所有的列表项 |
列表选择对话框中的输入参数可以选取下表中所列的值:
参数 | 参数功能简介 |
---|---|
‘ListString’ | 该参数用于设置列表框中的列表项,是一个字符向量 |
‘SelectionMode’ | 该参数用于设置是单模式还是多模式选择,默认是多模式选择。参数取值是一个字符串,可以取single或multiple |
‘LiseSize’ | 该参数用于设置列表框的大小,是一个两元素向量[width height],默认值是[160 300],单位是像素 |
‘InitialValue’ | 该参数用于说明初始选择的列表项的索引,默认是1,即第一项。参数的取值是一个向量 |
‘Name’ | 该参数用于设置列表选择对话框的标题名。默认是空字符串 |
‘PromptString’ | 该参数是一个字符矩阵或字符向量,用于标明在列表框上面的说明性文本。默认是空 |
‘OKString’ | 该参数用于设置OK按钮上的文本。默认是字符串OK |
‘CancelString’ | 该参数用于设置Cancel按钮上的文本。默认是字符串Cancel |
‘uh’ | 该参数用于设置控件按钮的高度。默认是18,单位是像素 |
‘fus’ | 该参数用于设置框架与控件对象之间的距离。默认是8,单位是像素 |
‘ffs’ | 该参数用于设置框架与图形窗口对象之间的距离。默认是8,单位是像素 |
d = dir;
str = {d.name};
[s,v] = listdlg('Promptstring','选择文件:','selectionmode','single', 'listsize', [300 400],'liststring',str);
除了前面介绍的对话框函数,MATLAB R2018a还提供了一些其他的对话框函数,例如用于创建对话框或图形用户对象类型的图形窗口的dialog函数、菜单类型的选择对话框menu函数及显示等待进度条的waitbar函数等。关于它们的创建方法,可以参考MATLAB帮助文件。
⛄界面菜单
大多数的图形用户界面(GUI)通过选择各级菜单,可以执行相应的命令,实现相应的功能。一般地,从菜单的标题或名字可以大概了解该菜单的功能。在使用MATLAB创建图形用户界面时,也常常需要产生界面菜单;在编辑其他编辑对象时,需要产生弹出菜单,即上下文菜单。这两种菜单在MATLAB中可以通过uimenu或uicontextmenu来产生。
👀菜单建立
在MATLAB R2018a中,可以通过命令行和GUI设计工具的菜单编辑器Menu Editor两种方式来建立界面菜单。
(1)命令行方式
在命令行方式下,可以通过函数uimenu来建立下拉式菜单对象。uimenu函数常见的命令格式如下表所示:
格式 | 说明 |
---|---|
uimenu(‘PropertyName’, PropertyValue, …) | 使用指定的属性值在当前图形窗口产生菜单,可以产生的属性值后面将做介绍 |
uimenu(parent, ‘PropertyName’, PrpertyValue, …) | 在父菜单中产生子菜单,或在由父窗口指定的上下文菜单中产生菜单项。如果父句柄指向另一个uimenu对象或uicontextmenu对象的图形,那么将会产生新的菜单栏 |
handle = uimenu(‘PropertyName’, PropertyValue, …) | 可以返回菜单句柄,其余的设置同上 |
handle = uimenu(parent, ‘PropertyName’, PropertyVaLue, …) | 可以返回菜单句柄 |
在命令行方式下,可以通过函数uicontextmenu来创建内容式菜单对象。uicontextmenu函数常见的命令格式如下表所示:
格式 | 说明 |
---|---|
Hm_contextmenu = uicontextmenu(‘PropertyName’, PropertyValue, …) | Hm_contextmenu是创建的菜单项的句柄值;PropertyName是菜单的某个属性的属性名;PropertyValue是与菜单属性名相对应的属性值 |
利用uicontextmenu函数生成内容式菜单后,再通过函数uimenu可在以往创建的内容式菜单中添加子菜单。然后可以通过set把创建的内容式菜单与某个对象相联系,通过设置对象的uicontextmenu属性,使内容式菜单依附于该对象。
(2)GUI设计工具菜单编辑器
在命令行方式下创建菜单时,需要记住用于创建的函数,而且要记住大量菜单属性的属性名,这对于创建菜单非常不方便。在MATLAB中利用GUI设计工具中的菜单编辑器(Menu Editor),可以很方便地创建下拉式菜单与内容式菜单。
👀菜单属性
利用函数uimenu 或 uicontextmenu 建立菜单时,可以定义菜单属性的属性值。利用函数set,可以设置、改变属性的属性值;利用函数get,可以获得菜单属性的属性值,也可以通过Property Inspector GUI设计工具来设置、改变菜单的属性值。
(1)uimenu菜单的属性
在菜单中,uimenu函数的属性名称和属性值的常用设置如下表所示:
①外观及风格控制属性
属性名称(PropertyName) | 属性值(PropertyValue) | 说 明 |
---|---|---|
Checked | Value:on,off Default:off | 菜单项前是否添加核选标记"√" |
Label | Value:String | 设置菜单的标题名称 |
Separator | Value:on,off Default:off | 分隔条 |
Foregroundcolor | Value:ColorSpec Default:[0 0 0] | 文本颜色 |
Visible | Value:on,off Default:on | 控制uimenu菜单的可见状态 |
②基本信息属性
属性名称(PropertyName) | 属性值(PropertyValue) | 说 明 |
---|---|---|
Accelerator | Value:character | 键盘加速键 |
Children | Value:Vectorofhandles | 子菜单句柄 |
Enable | Value:cancel,queue Default:queue | 禁止或使用uimenu |
Parent | Value:handle | 菜单对象的父对象 |
Tag | Value:String | 用户指定的对象标识符 |
Type | Value:String(read-only) Default:uimenu | 图形对象的类 |
UserData | Value:matrix | 用户指定的数据 |
③位置信息属性
属性名称(PropertyName) | 属性值(PropertyValue) | 说 明 |
---|---|---|
Position | Value:scalar Default:[1] | 相对的uimenu的位置 |
④回调函数执行控制属性
属性名称(PropertyName) | 属性值(PropertyValue) | 说 明 |
---|---|---|
BusyAction | Value:cancel,queue Default:queue | 回调函数中断 |
Callback | Value:string | 控制动作 |
CreateFcn | Value:string | 在对象生成过程中执行回调 |
DeleteFcn | Value:string | 在对象删除过程中执行回调 |
Interruptible | Value:on,off Default:on | 回调函数的中断方式 |
⑤控制操作属性
属性名称(PropertyName) | 属性值(PropertyValue) | 说 明 |
---|---|---|
Handle Visibility | Value:on,callback,off Default:on | 在命令行或GUI中是否可见 |
(2)uicontextmenu菜单的属性
参见uimenu菜单的属性。在命令行方式或者GUI设计方式下,可以方便地对uimenu菜单与uicontextmenu菜单的属性进行设置、修改。
⛄图形界面创建工具GUIDE
如果只在MATLAB命令行窗口中输入命令来编写GUI界面,那么编程的效率实在是太低了。MATLAB提供了功能强大的GUIDE模板,用于创建各种用户图形对象。通过该GUIDE模板的使用,可以自动生成相应的M文件框架,简化了用户编写图形界面程序的工作。如果需要更改相关的内容,则可以直接打开M文件进行修改或编写自己的代码。图形界面创建工具GUIDE大大增强了图形界面创建的能力。
(1)利用创建工具GUIDE进行GUI设计
利用创建工具 GUIDE 进行 GUI 设计的步骤和方法:
- GUIDE的启动
在MATLAB的命令行中输入guide,启动图形界面创建工具GUIDE,系统弹出GUIDE快速入门对话框。该对话框中主要包括两个选项卡:①创建GUI选项卡,包含了4种类型的GUI模板:默认的空白GUI模板、带有Uicontrol控件的GUI模板、带有坐标轴和菜单的GUI模板及模态对话框模板;②打开现有GUI选项卡,打开已有的GUI对象或者单击该选项卡中的浏览按钮来浏览选择已经存在的GUI对象。
如果需要对GUI编辑界面的显示属性进行修改或重新设置,则可以选择"文件"→"预设选项"命令进行设置。可以设置的属性包括在组件选项板中显示名称、在窗口标题中显示文件扩展名、在窗口标题中显示文件路径及为新生成的回调函数添加注释等。
-
创建图形用户界面对象:在打开的图形用户界面上添加控件来完成这个图形界面的布局和控制。
-
设置组件的属性:从工具栏中选择"属性检查器",设置属性。
-
编写回调函数:完成图形用户界面的编辑后,添加回调函数执行代码,才能完成图形函数的处理过程。
-
图形用户界面的执行:在图形用户编辑界面中单击"运行"按钮 来运行编辑过的图形用户界面(GUI)。
(2)GUIDE创建的工具
在使用GUIDE创建图形用户界面时,有些比较常用的功能,能够更好地帮助用户完成图形用户界面的绘制过程。
- 位置调整工具:“工具"→"对齐对象”
- 排列组件对象以完成界面的布局和排布。
- 网格和标尺:“工具"→"网格和标尺”
- 调整改变网格线的间距或显示标尺。
- 对象浏览器:"视图"→"对象浏览器"或选择工具栏中的“对象浏览器”图标,
- 查看放置在图形界面中对象的名称及相互之间的继承关系等。
- GUI组件选项:“工具"→"GUI选项”,
- ①调整大小的方式(不可调整大小/成比例/其他);
- ②命令行的可访问性(回调/禁用/启用/其他),在创建图形对象的过程中,选择是否通过命令行方式来访问各种对象;
- ③生成FIG文件和MALTAB文件,此项可以设置用户在创建GUI对象时,是否生成FIG文件和M文件;
- ④仅生成FIG文件,此时仅仅创建FIG文件,可以使用open或hgload来显示该文件,一般在用户希望创建一个与M文件完全不同的实例时,可以选择此选项。
多谢!多谢!
笔者不才,请多交流!!!
欢迎大家关注预览我的博客Blog:HeartLoveLife(https://heartlovelife.github.io/)
能力有限,敬请谅解!!