本期主要介绍4个控件:面板(Panel)、表格(Table)、弹出菜单(Pop-up Menu)、轴(Axes)。

其中,面板(Panel)、轴(Axes)比较简单,重点介绍表格(Table)和弹出菜单(Pop-up Menu)。

面板(Panel)主要用于布局设计。通过面板,可以将操作界面的功能区区分开来,让界面清晰明了,具备较强的交互性。

轴(Axes)主要用于绘图或者图像等的显示,它提供了一块区域或者说容器,绘图或图像可以显示在此区域或装载进此容器。

弹出菜单(Pop-up Menu)主要用于预设多个选项菜单,方便用户快速做出选择。

表格(Table)只是用来显示数据。

因为表的自身属性较多,这里有必要介绍一下:

1.列属性(列属性的设置必须指定列,一一对应)

列可编辑性(ColumnEditable):设置指定列数据是否可编辑,只有0(否)、1(是)两个值,决定运行过程中表中对应列的数据是否可由用户编辑修改,默认是否;

列数据类型(ColumnFormat):设置指定列数据类型,可选择的数据类型主要有3种:数字型(Numeric)、文本型(Text)、逻辑型(Logical),默认是由Matlab自主识别,如果数据类型该列数据类型不一致,Matlab将进行数据转换,数据转换不成功则报错;

列名(ColumnName):设置指定列名称;

列宽(ColumnWidth):设置指定列宽度。

2.行属性(行属性的设置必须指定行,一一对应)

行名(RawName):设置指定行名称;

行条纹色(RawStriping):设置行的底色,只能指定两种,分别对应奇数行和偶数行。

实例1:数据绘图

<实例功能>

通过弹出菜单选择数据,点击按钮载入数据到表格,同时将数据绘图显示在轴上。

<实现过程>

1.新建1个GUI

在命令窗口输入“guide”,回车,在弹出的窗口中选择“空白GUI(Blank GUI(Default))”,点击“OK”,新的GUI创建完成。这里,新的GUI命名为“DataPlot_test.fig”。

2.布局控件

本实例用了面板(Panel),所以首先放置一个面板(Panel)作为主舞台。主舞台的大小根据 需要先预估,后面再根据情况调整。

主舞台布设完毕,接下来布局各个功能区。本实例共区分3个功能区:数据区、控制区、绘图区。每一个功能区用一个面板区分,功能区的其他控件均放置在对应面板上。

下面分别加以说明:

数据区。数据区主要是用来显示载入的数据,所以只需放置一个表即可。

控制区。控制区主要用于选择数据并载入,需要一个弹出菜单用于数据选取,一个按钮用于执行载入操作。

绘图区。绘图区主要用于将载入数据图形化绘制出来,需要一个容器,所以放置一个轴即可。

根据各区大小,兼顾美观,最后布局效果如下:

3.设置属性

本实例属性设置较为简单,这里不再多做说明。

①设置面板(Panel)属性

标题(Title):各面板依次是“数据绘图,数据区,控制区,绘图区”;

字体名称(FontName):黑体;

字体大小(FontSize):主面板(数据绘图)为10.0,其他为8.0。

②设置表(Table)属性

句柄(Tag):Data_table。

③设置弹出菜单(Pop-Menu)属性

字符(String):“1.xls,2.xls”(数据名称,注意1个数据1行);

句柄(Tag):Data_menu。

④设置按钮(PushButton)属性

字体名称(FontName):黑体;

字体大小(FontSize):10.0;

字体粗细(FontWeight):bold(粗);

字符(String):“载  入”;

句柄(Tag):Data_load。

⑤设置轴(Axes)属性

句柄(Tag):axes1。

设置完毕后,效果如下:

4.设置回调函数

思路分析

这里功能的实现主要分三步:选择数据—>载入数据—>数据绘图。首先通过弹出菜单选择数据,然后按钮获取选择的数据名称,将其载入表里并绘制在轴上,这里涉及文件读取操作,整体较简单,不再赘述,详细见代码。

详细代码如下:

运行程序,效果如下:

实例2:数据交互绘图

<实例功能>

这个实例是上一个实例功能的拓展,在上一实例的基础上,将数据列扩充为3列,且列数据可实时编辑修改,绘图同步更新。增加了绘图函数的选项,用户可以选择自己需要的绘图函数进行绘图。

<实现过程>

1.新建1个GUI

将上一实例的GUI直接另存为“DataPlotEdit_test.fig”,新的GUI创建完成。

2.布局控件

本实例在上一实例的基础上扩充来实现,这里只需调整表的宽度,增加1个弹出菜单(Pop-up Menu)用于绘图函数的选择即可。效果如下:

3.设置属性

这里只需设置新增加的弹出菜单(Pop-up Menu)的属性:

字符(String):“选择绘图函数”(这里只用作提示,具体在代码中设置,根据载入数据提供可选绘图函数)。

最终布局效果如下:

4.编辑回调函数

思路分析

相比上一实例,这里主要增加了2个功能:一是表数据可编辑,可实时更新绘图;二是绘图函数可自主选择。

先来看第一个功能的实现,表数据可编辑,可实时更新绘图。这个功能的实现重点是知道用户是否修改了数据。如果修改了数据,只需读表、重绘图即可。针对用户的这一需求,Matlab提供了CellEditCallback这个回调函数,用于用户编辑表数据时的回调操作。

在GUI设计面板选中表,在右键菜单里选择 View Callbacks—>CellEditCallback,定位到此回调函数,可以看到该函数的使用说明:

从说明中可以看到该函数的项目数据(eventdata)结构体有以下几个属性:被编辑数据的行列索引索引(Indices)、编辑前数据(PreviousData)、用户输入的数据,如果编辑前后数据无变化此值为空(EditData)、Matlab列数据类型设置转换后的用户输入数据(NewData)。

因此第一个功能可按如下方法实现:

①读取EditData值,判断编辑前后数据有无变动。数据未变化则不执行任何操作,否则进行下一步。

②读取表数据,重绘图。

第二个功能的实现相对简单,主要是判断载入数据是二维还是三维数据,然后推荐二维或三维绘图函数即可。这里我们数据是按列存储的,所以可以根据载入数据的列数判断,不再赘述。

具体代码如下:

①载入按钮的回调函数

②绘图函数弹出菜单的回调函数

③表格编辑的回调函数

运行程序,效果如下:

本期知识就讲到这里,下期再见!