MATLAB图像用户界面(1)

       图像用户界面,GUI,作为包含了使用户能执行交互式任务的设备或组件图像显示,在许多程序设计软件中都是不可缺少的功能。这次,我们就来了解下MATLAB中的GUI。

       首先,先谈下GUI基础,也是今后操作必须熟悉的知识。在MATLAB中,每一个图形对象都会有唯一 一个句柄和一组定义图形对象外观的属性。句柄,可以理解成是图形“身份证”,见它犹如见本人。用户能够使用这些句柄图像控制图像的行为和外观。(句柄图像今后的博客会谈及)。图形对象包括了Uimenu和Uicontrol对象,以及图形、坐标轴、文本及子对象。

     看那么多文字,难免会厌烦,先让我们看下GUI的经典应用吧:

     对于传递函数G=1/s.^2+2*s*zeta+1的归一化二阶系统,制作绘制该系统单 位阶跃响应的图形用户界面

1)这是打开的界面


 

2)



 

3)

扫描二维码关注公众号,回复: 850452 查看本文章



 

4)点击grid on按钮,会生成网格线



 

clc
clear all;
%产生图形窗口和坐标轴
clf reset
H=axes('unit','normalized','position',[0,0,1,1],'visible','off');
set(gcf,'currentaxes',H);
str='\fontname{隶书}归一化二阶系统的阶跃响应曲线';
text(0.12,0.93,str,'fontsize',13);
h_fig=get(H,'parent');
set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.4]);
h_axes=axes('parent',h_fig,'unit','normalized','position',[0.1,0.15,0.55,0.7],    'xlim',[0 15],'ylim',[0 1.8],'fontsize',8);
%在坐标右轴生成静态文本框和编辑框
h_text=uicontrol(h_fig,'style','text','unit','normalized','position',...
    [0.67,0.73,0.25,0.14],'horizontal','left','string',...
    {'输入阻尼比系数','zeta='});
h_edit=uicontrol(h_fig,'style','edit','unit','normalized','position',...
    [0.67,0.59,0.25,0.14],'horizontal','left','callback',...
   ['z=str2num(get(gcbo,''string''));',...
   't=0:0.1:15;',...
   'for k=1:length(z);',...
   's2=tf(1,[1 2*z(k) 1]);',...
   'y(:,k)=step(s2,t);',...
   'plot(t,y(:,k));',...
   'if (length(z)>1),hold on,end,',...
   'end;','hold off,']);
%生成坐标网格按钮
h_push1=uicontrol(h_fig,'style','push','unit','normalized','position',...
    [0.67,0.37,0.12,0.15],'string','grid on','callback','grid on');
h_push2=uicontrol(h_fig,'style','push','unit','normalized','position',...
    [0.67,0.15,0.12,0.15],'string','grid off','callback','grid off');

接下来,就进入到正题,我们这次就先了解下“菜单”。

1.菜单的布置

建立菜单项的语法格式:hm=uimenu(Hx_parent,'PropertyName',PropertyValue,...)

hm——菜单项句柄     Hx_parent——默认父辈对象的句柄

Uimenu对象中最重要的属性是:'Label'和'Callback'。

'Label'属性值是菜单条和下拉菜单项上的文本字符串,以确认菜单项。
'Callback'属性值是MATLAB字符串,当选中菜单项时,它传给eval,用以执行。

    删除或恢复所有标准菜单:

h=figure(1);
set(h,'Menubar','none');   %删除
set(h,'Menubar','figure'); %恢复

  我们就看下最简单的菜单实例吧,通过下面的代码认识创建的过程:

   

clc
h=figure(1);
set(h,'Menubar','none');
hm_ex=uimenu(gcf,'Label','Example');
%Example菜单下的子菜单
hm_exgrid=uimenu(hm_ex,'Label','Grid');
hm_exview=uimenu(hm_ex,'Label','View');
hm_box=uimenu(hm_ex,'Label','Axis Box','CallBack',[...
'if strcmp(get(gca,''Box''),''on''),',...
'set(gca,''Box'',''off''),',...
'set(hm_box,''Checked'',''off''),',...
'else,',...
'set(gca,''Box'',''on''),',...
'set(hm_box,''Checked'',''on''),',...
'end']);
%View菜单下的子菜单
hm_ex2D=uimenu(hm_exview,'Label','2_D');
hm_ex3D=uimenu(hm_exview,'Label','3_D');
%第二个顶层菜单Close
hm_close=uimenu(gcf,'Label','Close');
hm_clfig=uimenu(hm_close,'Label','Close Figure','CallBack','Close');
hm_clmenu=uimenu(hm_close,'Label','Remove Menu');

‘Label’后面跟的是该菜单的名字,而‘CallBack’后面跟的是回调字符串,关于回调属性后面再详说。


 如图,我们创建了两个菜单Example和CLose,然后Example下面还有三个子菜单,而View菜单下面也还有两个子菜单。

2)定义系统快捷键(在X Window系统)

hm_top=uimenu('Label','Example');
uimenu(hm_top,'Label','&Grid');

 ——定义了键盘上G为快捷键。注&后面跟的字母即为快捷键!

 注意:不可以为顶层菜单定义快捷键···

3)菜单的外观

三个属性值:'Position'、'Checked'和'Separator'

Position
改变菜单位置:set(hm_1,'Position',1);
得到菜单位置:get(hm_2,'Position');

Checked——使校验标记出现在菜单项标志的左边,默认'off'

改变菜单项标志本身:

例:

hm_box=uimenu(hm_ex,'Label','Axis Box','CallBack',[...
'if strcmp(get(gca,''Box''),''on''),',...
'set(gca,''Box'',''off''),',...
'set(hm_box,''Label'',''Set Box on''),',...
'else,',...
'set(gca,''Box'',''on''),',...
'set(hm_box,''Label'',''Set Box off''),',...
'end']);

 

 

 选中Axis Box后,右边会出现打钩的标记!

Separator——将下拉菜单分成局部组

set(hm_box,'Separator','on');

 菜单的颜色控制:

'BackGroundColor'控制填充菜单背景的颜色
'ForeGroundColor'确定菜单项文本的颜色,默认黑色

%第三个顶层菜单Color
hm_color=uimenu(gcf,'Label','Color');
hm_submenu1=uimenu(hm_color,'Label','Red','CallBack','set

(gcf,''Color'',''Red'')');
hm_submenu2=uimenu(hm_color,'Label','Blue','CallBack','set

(gcf,''Color'',''Blue'')');



 

   菜单项去能(菜单可见但不能被选择)

set(hm,''Enable'',''off'');

关于菜单的回调属性,下次和句柄图形一起说明。

猜你喜欢

转载自459838660.iteye.com/blog/2202256