本期主要介绍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值,判断编辑前后数据有无变动。数据未变化则不执行任何操作,否则进行下一步。
②读取表数据,重绘图。
第二个功能的实现相对简单,主要是判断载入数据是二维还是三维数据,然后推荐二维或三维绘图函数即可。这里我们数据是按列存储的,所以可以根据载入数据的列数判断,不再赘述。
具体代码如下:
①载入按钮的回调函数
②绘图函数弹出菜单的回调函数
③表格编辑的回调函数
运行程序,效果如下:
本期知识就讲到这里,下期再见!