Matlab GUI编程总结
代码示例:http://download.csdn.net/detail/nuptboyzhb/4474277
1. 创建及初始化界面(Figure)
SystemFrameHandle=figure(1);%创建一个窗口
clf reset
set(gcf,'name','CSplatform NUPT','numbertitle','off',...
'unit','normalized','position',[0.02,0.1,0.92,0.82],...
'menubar','none');
说明:第一句是新创建一个窗口,并且记录窗口的句柄。第二句话是清除和重置相关的窗口及图形信息。第三句是设置gcf的属性。属性的格式是:先<属性名>,后紧接着是属性的<值>。其中gcf:Get handle to current figure.也即是获得当前窗口的句柄。窗口的属性很多,具体可以参看matlab帮助文档。http://www.mathworks.cn/help/techdoc/ref/figure_props.html;jsessionid=b1a1b2c452f8eed5976059921483
2. 菜单(uimenu)
menu_file=uimenu(gcf,'Label','File(&F)');
menu_open_image=uimenu(menu_file,'Label','Open Images(&O)');
说明:上述语句创建了2个菜单项。其中,第二个菜单项是第一个菜单项的子项。因此,我们可以看出,菜单的创建有2中方法:
handle = uimenu('PropertyName',PropertyValue,...)
handle = uimenu(parent,'PropertyName',PropertyValue,...)
uimenu的属性和uicontrol的属性一样,具体看第三节
3. 控件(uicontrol)
控件的创建有如下2中方法
handle =uicontrol('PropertyName',PropertyValue,...)
handle = uicontrol(parent,'PropertyName',PropertyValue)
具体是创建哪个类型的控件,控件的属性等,都有<属性>及其<值>决定。
部分属性解析:
1 ‘BakcgroundColor'(背景颜色)---ColorSpec(特定的颜色).这个属性声明了用来填充uicontrol对象的背景颜色,ColorSpec是一个三元素的RGB 向量或者标准颜色的字符串号,默认的颜色值是和系统相关的,并且可以通过输入命令get(0,'DefaultUuicontrolBackgroundColor')获得。该<值>的格式为[0.10.1 0.1];其中,三个值分别代表红、绿、蓝。值的范围0~1
2 ‘Callback'(返回,回调)----string(字符串)。这个属性声明了当用户触发uicontrol对象(如:在按下一个'pushbutton'或者拖动一个'slider')时候所执行的字符串(一般为函数名),'frame' 和静态的'text'uicontrol类型不发出回调。更确切的说,callback就是设置控件的消息响应处理函数。
3 ‘CData'--m-by-n-by-3array( 矩阵)这个属性是一个在'pushbutton'或'fogglebutton'uicontrol类型上显示的真彩色图像。
4 ‘Enable'---{‘on'}(默认状态)|‘inactive'(静态)|'off'(关)这个属性声明了是否启用这个uicontrol对象,当设置为'on'的时候,在这个uicontrol被选中的时候,执行这个回调字符串,当设置为'off'的时候,这个uicontrol标签字符串就变暗。当设置为'inactive' 的时候,uicontrol没有被变暗,当设置为'off'和'inactive'的时候,不执行这个回调字符串,但是'ButtonDownFcn'属性还是会起作用。
5 ‘Extent'(宽度,长度)---[0 0 width heigth],这个属性是一个只读属性,它返回用来标识这个uicontrol所使用的文本字符串的大小,其格式为标准的直角坐标格式,单位为'Units'属性所声明的单位,这个属性可用于确定装载所期望标签字符串而需要的uicontrol的大小。
6 ‘FontAngle'(字体倾斜度)---{‘normal'}|'italic'(斜体的)|'oblique'(斜的,歪的)这个属性声明了所用的字符的倾斜度。
7 ‘FontName'(字体)---string这个属性声明了所使用的字体类型,使用'FixedWidth'就将字体设置为保存在根对象的'FixedWidthFontName'属性中的字体。
8 ‘FontSize'(字体大小)---number(数字),声明了字体的大小,单位为'FontUnits'属性所声明的单位。‘FontUnits—{‘points'(点)}|'normalized'|'inches'(英寸)|'centimeters'(厘米)|'pixels'(图素)这个属性声明了字体相对于这个高度的大小使用的单位,设定为'normalize'是指uicontrol的高度为1.
9 ‘FontWeight(字体粗细)'---'light'|{‘normal'}|'demi'(半)|'boid'
10 ‘ForegroundColor'(前景色)---ColorSpec(色值)声明了uicontrol的标签文本的颜色,ColorSpec是一个三元素的RGB向量,或者是一个标准颜色的字符串名,默认值为黑色。
11‘HorizontalAlignment'(水平方向上的对齐方式)—{‘left'}(左)|'center'(中)|'right'(右)这个属性声明了uicontrol在水平方向上的对齐方式,在windowspc机上,这个属性只影响到'edit'和'text'类型的uicontrol.
12 ‘ListboxTop'---scalar,对'listbox'类型的uicontrol,这个属性声明了显示在列表最顶端的字符串的索引。
13 ‘Max'(最大)---scalar(比列),对于'radiobutton'和'checkbox'类型的uicontrol,'Max'是uicontrol为'on'时'Value' 属性的值,对于'slider'类型的uicontrol,‘Max'是用户能够选择的最大值,并且它必须比'Min'属性所声明的值要大,默认值为1,对于'edit' 类型的uicontrol,如果'Max'-‘Min'>1,那么就可以进行多项选择,如果'Max'-‘Min'<=1,那么就只可以进行单项选择。
14 ‘Min'---scalar类似13
15 ‘Position'(位置)---[left(左) bottom(底) width(宽) heigh(高)]它声明了uicontrol的位置,格式为相对于图形窗口左下角的标准直角坐标格式,单位为'Units'属性所定义的单位,windowspc中‘popupmenu'类型的uicontrol的高度是由字体来设置的,并且将heigth 忽略。
16 ‘SliderStep'(滚动条步长)—[arrow_step trough_step]这个属性声明了一个值,这个值是经过标定的'Max'-'Min' ,大小在0到1间,arrow-step是点滚动条上的箭头时滚动条移动的步长, trough_step是点滚动条的滑槽时滚动条移动的步长。
17 ‘String'—string这个属性声明了显示在按钮,拨动按钮,静态文本,弹出菜单上的uicontrol标签字符串,弹出菜单中的多个菜单项或者列表中的多个列表项可以声明为字符串单元数组,字符串矩阵或者由竖线字符分开的字符串,多行可编辑文本或者静态文本控件中的行分隔符号出现在字符串矩阵的各行之间或者字符串单元数组的每一个单元之间,竖线字符未被解释成线分隔符,在'edit'类型的uicontrol中,经过修改的文本可以通过这个属性返回。
18.‘Style'(类型)—‘pushbutton'(按钮键)|'togglebutton'(触发器)|'radiobutton'(无线按钮)|'chechbox'(检查框)|'edit'(编辑)|'text'(文本)|'slider'(滑标)|'frame'(框)|'listbox'(列表)|'popupmenu'(跃上型)这个属性声明了要生成的uicontrol对象类型
19.’Visible’(可见)——该属性默认值为‘on’,当该值设置成’off’时,该控件不可见。通过控制控件的显示与不显示,可以完成‘刷新’界面的功能。
4. 设置和获取属性(set and get)
Set(handle,'PropertyName',PropertyValue,…)
PropertyValue=Get(handle, 'PropertyName');
上述是设置和获得属性的调用语法。无论是窗口、菜单还是控件,都可以通过set修改其属性,也可以通过get获取其属性。重要的是,一定要获得它们的句柄(handle),因此,在创建窗口、菜单和控件时,要保存它们的句柄。
Callback函数:在控件的回调函数中,我们可以通过获得或设置相应控件上的值,来达到我们的目的。因此,我们可以将句柄通过参数的方式或声明为全局变量,以达到在其他函数中设置获取控件的属性。
5. 特定区域显示图像
我们可以用subplot函数,将界面分成很多份,然后选择其中一份显示图像。但是,当我们的界面复杂时,我们需要在特定的区域内显示图像。我们可以采用如下方法:
NewImageShowHandle=axes('Units','normalized',...
'position',[0.6 0.52 .3 .4],'Color',[0.2 0.2 0.2],'Visible','off','Parent',SystemFrameHandle);
imshow(uint8(reconstructed_image),'Parent',NewImageShowHandle);
也即是:先在特定的位置新建一个坐标(axes),然后在imshow函数中,设置显示图像的‘父窗口’即可。
6. 界面的刷新
一般情况下,不存在界面刷新的问题。但是,当我们需要在程序运行的过程中更新界面的某一个控件,我们就需要实时刷新界面。一般情况下,由于matlab在运行程序时,执行的是主线程,因为界面线程的优先级低于主线程,界面线程要等到主线程执行完之后才执行。但是,我们可以调用pause(0.000001)函数,让主线程暂停0.000001秒,刷新界面后再去执行主线程。基于此,我编写了一个‘进度提示’控件。详见示例代码。