在MATLAB中使用纯代码编写GUI的方法适用性非常好,它基于.m或者.mlx脚本文件,几乎用任何版本的MATLAB纯代码生成的GUI都不会出现版本不兼容的问题,这种编写方法结合“使用ASCII表示中文字符”的方法,是非常可靠的GUI编写方法。该方法并没有像GUIDE和App Designer那样流行,因为它需要编程者熟知每种控件的编写代码和属性,在界面排版方面没有在画布上拖放控件直观、快捷,但是该方法容易入门,使用相对简单。本书将每个控件用到的属性一一列出并对其做解释,方便读者查询和使用。
下面3个示例演示了采用代码编写GUI的不同属性设置。
下面一段代码展示了按钮随着窗口大小的改变而改变,起到这个作用的关键字为'Units', 'normalized',这是一对名值(Name,Value)参数对,逗号前面为属性名,后面是该属性的值。Units为单位(大小的量度),normalized的意思为归一化。
f1=figure('Units', 'centimeters', … 'position',[2 6 6 6],'menubar','none', … 'numbertitle','off','resize','on'); str='<html>会当凌绝顶,<br>一览众山小。</html>'; h1=uicontrol('Style', 'pushbutton', … 'Units', 'normalized','FontSize', 12, … 'position', [0.2 0.4 0.6 0.3], 'string', str);
运行结果如图1-1所示。
图1-1 运行结果(1)
Units属性指定为表1-1中的一个值。
表1-1 Units属性的值及说明
Position属性的值[left bottom width height]代表[与父容器左边的距离 与父容器底边的距离 该控件的长度 该控件的高度]。
无论采用什么单位,生成的对象的位置都是以父容器左下角为基准进行测量的。
Units属性会影响Position属性。如果编程者更改Units属性的值,则比较好的做法是在完成该段代码运行后将其恢复为默认值,以便不影响其他假定Units属性为默认值的函数。
如果编程者在创建对象时以名值参数对的形式指定Position属性和Units属性,则指定顺序很重要。如果想用特定单位定义位置,则必须在设置Position属性之前设置Units属性。
下面一段代码展示了单位为厘米,并且增加了前景色为蓝色、字体为斜体的示例。如果不指定父容器,则MATLAB给出默认的父容器,该父容器的大小可以在命令行窗口输入f=get (figure); f.Position语句来获取。运行结果如图1-2所示。
str='<html>欲穷千里目,<br>更上一层楼。</html>'; h2=uicontrol('Style', 'pushbutton', 'FontSize', 12, … 'Units', 'centimeters','position', [3,3,3,2], … 'string', str,'ForegroundColor','blue', … 'FontAngle','Italic');
图1-2 运行结果(2)
下面一段代码展示了颜色设置的另一种方式——用矩阵代表颜色。运行结果如图1-3所示。
str='<html>欲穷千里目,<br>更上一层楼</html>'; h3=uicontrol('Style', 'pushbutton', … 'FontSize', 12,'String', str); h3.Position=[50 50 150 80]; set(h3,'ForegroundColor',[1,0,1]);
图1-3 运行结果(3)
从上面的示例可以看出,代码不仅可以写为一句长代码,也可以分段书写。
上面的示例涉及图形对象、图形对象句柄、图形对象属性、图形句柄操作等内容。