gusucode.com > matlab界面设计的一些资料笔记,可以做为初学者参考用 > GUI制作中文资料/GUI笔记II.txt

    GUI常用函数:

(1) 利用结构和细胞数组指定一个群组的属性对于一次设置多个对象的属性非常有效,因为该数组可以在任何对象中调用。下例定义了一个名为active的结构数组,设置特定figure窗口下的unicontrol对象的Backgroundcolor、enable和Foregroundcolor等属性。
         例:active.backgroundcolor=[1 0 0];
 active.enable = 'on';
 active.foregroundcolor = [0 1 0];
 handle = uicontrol(gcf,'style','text','position',[50 50 200 30],'string','以结构数组来设置对象的属性范例');
 set(handle,active);
(2) 也可如下设置多个对象的属性值:set([gcf,gca],'color','r')
(3) 补充:gcbf:获得当前正在执行Callback程序的图形对象的父对象句柄值。
             gcbo:获得当前正在执行Callback程序的图形对象句柄值。
(4) copyobj:将指定对象由其父对象中复制到另一个父对象中,如copyobj(text_handle,axes_handle)将句柄值为text_handl的Text对象到句柄值为axes_handle的坐标轴中。
(5) 程序编写GUI步骤:
第一步:建立figure对象以作为整个GUI的基础窗口,并设置该窗口的相关属性。若后续需要建立uimenu,则必须更改窗口的Menubar属性为menubar或figure。
第二步,决定建立需要的axes或uicontrol、uimenu、uicontextmenu对象,并设置相关属性及Callback。

注意:在应用uicontrol,unimenu等语句中,如果当前只有一个绘图窗口,则不必指定窗口;若有多个绘图窗口,则必须在uicontrol对象内指定显示在哪个窗口中。

分别介绍:
(a) handle = uicontrol(parent)
在指定的父对象(parent)上建立一个uicontrol对象。所有uicontrol对象都是figure窗口的子对象,因此可以直接在parent指定的figure窗口中放置uicontrol对象,handle是其返回的句柄值。也可以通过指定属性名称的属性值来建立uicontrol对象,即handle = uicontrol(...,'属性名称1','属性值1',...)其中属性名称和属性值可以为单一字符串的形式(若属性值为数值或矩阵就不需要加单引号),也可以为结构数组或细胞数组。
例1:fg = figure(1) ;
       text = uicontrol(fg,'style','text','position',[5 10 50 50],'horizontal','left','string',{'标题','输入值='});...
例2:uicontrol('style','pushbutton','string','plot','callback','plot(linspace(0,2*pi),sin(linspace...                   (0,2*pi)))','units','point','position',[50 65 75 35]);
例3:hpop = uicontrol('style','popup','string','hsv|hot|cool','position',[20 300 100 50],'callback',...
         ['hpop_val = get(hpop,''value'');','if hpop_val == 1','colormap hsv;','elseif hpop_val ==2',...
         'colormap hot;','elseif hpop_val == 3','colormap cool;','end']);(hot和cool代表不同的颜色,
         hsv(hue-saturation-value)色饱和图,是一种同RGB(red-green-blue)对应的色图)
注:callback编写:除了重新建立一个function格式的M文件外,还可以用矩阵输入的方式:双引号取代单引号;每一行仅编写一个Callback程序;使用矩阵符号将整段Callback程序括起来,并利用单引号将每行括起来。
uicontrol支持的对象如下:
1。check boxes(style:'checkbox'):选取check boxes时,会执行该对象在Callback中设置的相对应的操作。check boxes提供用户多个独立的选择模式,用左键选取某个check boxes,并且选中的check boxes上会显示v,且value属性值将设为1;若在同一选项上再次单击,则清除v,value设为0。
2。Editable text(style:'edit'):建立文本框并允许用户输入与修改该文本框的内容,其string属性中会纪录这些文字信息。Matlab必须执行Callback函数来更新属性string的值(即使当前屏幕显示的文字已经改变)。
3。List boxes(style:'listbox'):显示列表的项目,并允许用户选择一个或多个项目,属性Min和Max控制选择的模式,若max-min>1,则可用以项目的复选操作,如果max-min<=1,则仅可以单选。一次选取多个项目时,value用向量表示。鼠标释放的操作改变value值后,Matlab将立即执行list boxes的callback函数,因此,需要增加一个Done按钮,以便进行复选操作时能延迟该项目的执行。选取项目有单击和双击左键两种模式,对应Figure对象中的Selectiontype属性,设置为'normal'或‘open'。
4。pop-up menus(style:'popupmenu'):当对象被按下时,将立即打开并显示一个选择性列表(string属性设置)。当没有打开时,该对象仅显示当前的选项,与list boxes的操作类似。
5。push buttons(style:'radiobutton'):该对象与check boxes类似,但它包含数个互斥且相关的选项,适合应用于一个群组中只能选择一个的状态。为了确保互斥性,在各个Radio buttons的Callback内需编写逻辑判断,仅允许当前的Radio buttons作用,即将其他各项value属性值设为0。也可用Button Groups(Matlab 7.0)来实现这个需求。
6。sliders(style:'slider'):允许用户移动某一范围的条状物来输入一个指定的数值。用户要移动Sliders的条状物,只需在该条状物上按下鼠标不放;或直接在条状物的滑槽内单击鼠标;或使用鼠标单击滑槽上的箭头,即可移动条状物了。释放鼠标后,条状物所在位置会将对应数值返回Value属性中。用户可以设置条状物的最大值(Max)最小值(Min)与当前值(Value)。
7。static text(style:’text‘):显示文字的对象,并且该文字是由string属性所定义的内容。static text是静态对象,用户不能动态修改所显示的文字,只能通过string属性来更改。该对项没有相关的Callback函数。
8。Toggle buttons(style:’toggle‘):当toggle button被按下时,会立即执行在callback中相应操作,并显示当前的状态为on(按钮按下)或off(按钮弹起),即与push buttons不同,toggle buttons可以分别控制按钮的按下和弹起对应的操作。
(b)uimenu
一般,默认的Matlabfigure窗口已经包含File,Edit,View等菜单选项,但可以用uimenu建立额外的菜单选项,当用户激活某个选项后,Matlab会执行相对应的Callback函数。
handle = uimenu('属性名称1','属性值1',...);属性名称和属性值除可以用单一字符串来表示外,也可以是结构数组或细胞      数组。
handle = uimenu(parent,'属性名称1','属性值1',...);建立一个父菜单的子菜单(选项),或在父对象上建立一个uimenu对象。若parent是一个figure窗口,则产生新菜单,若parent为父菜单,则建立选项。
例:         f = uimenu('label','workspace');
 uimenu(f,'label','new figure','callback','figure');
 uimenu(f,'label','save','callback','uisave');
 uimenu(f,'label','quit','callback','exit','separator','on','accelerator','Q');
(c)uicontextmenu:uimenu用以建立标准的菜单,而uicontextmenu用来建立单击鼠标右键所出现的GUI选项,两者的使用方式相同,而uicontextmenu位置并非固定,而可以在一个特定的区域中就是合法的。uicontextmenu(handle,’属性名称‘,’属性值‘,...);uicontextmenu菜单在使用上会对应到特定的对象,若该对象的uicontextmenu属性值指定到uicontextmenu菜单的tag名称时,执行时就可以在该对象上单击右键来打开tag对应的uicontextmenu菜单。
(d)uipanel:
h = figure('position',[250 250 300 300]);
hp = uipanel('title','main panel','fontsize',12,'backgroundcolor','white','position',[.25 .1 .67 .67]);
hsp = uipanel('parent',hp,'title','subpanel','fontsize',12,'position',[.4 .1 .5 .5]);
hbsp = uicontrol('parent',hsp,'string','push here','position',[18 18 72 36],'callback','msgbox(''i love matlab'')');