【Matlab图形用户界面知识点合集】新手入门第十七天

图形用户界面

  • 前言
  • 1.创建GUI对象
    • 1.1用M文件创建GUI对象
    • 1.2使用GUIDE创建GUI对象
  • 2.定制标准菜单
  • 3编写回调函数
  • 4.创建现场菜单
  • 5.GUI对象的应用
    • 5.1控件区域框
  • 总结


前言

程序的用户界面是用户与计算机程序交互的方式。用户通过键盘、鼠标等输入设备与计算机交换信息。图形用户界面(GUI)是包含图形对象,如窗口、图标、菜单和文本的用户界面。用户以某种方式选择或激活这些对象,会引起动作或发生变化,例如调用计算机程序或者绘图。
【Matlab图形用户界面知识点合集】新手入门第十七天_第1张图片


1.创建GUI对象

用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。
图形用户界面(Graphical User Interfaces,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
GUI对象可以由M文件或GUIDE创建,下面介绍这两种方法的应用。

1.1用M文件创建GUI对象

GUI设计工具包括以下几个:

  • 对象设计编辑器:在图形对象内创建和安排各种对象;
  • 菜单编辑器:创建,设置或修改下拉式菜单和内容式菜单;
  • 对象属性查看器:可查看每个对象的属性值, 也可修改和设置对象的属性值;
  • 位置调整工具:左右,上下对多个对象的位置进行调整;
  • 对象浏览器:可观察当前设计阶段的各个句柄图形对象。

MATLAB为用户提供了4个GUI模式供用户选择,分别是空白版(Blank GUI)、带有控件的模板(GUI with Uicontrols)、带有坐标轴和菜单的模板(GUI with Axes and Menu)和问答式对话框(Modal Questions Dialog)。一般选择默认模式(即Blank GUI)进入对象设计编辑器如下图所示。
【Matlab图形用户界面知识点合集】新手入门第十七天_第2张图片
【例】对于传递函数为在这里插入图片描述的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。
首先在MATLAB中输入以下程序:

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);

运行后得到下面图形
【Matlab图形用户界面知识点合集】新手入门第十七天_第3张图片
再生成静态文本和编辑框,程序如下:

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);',...
'y(:,k)=step(1,[1 2*z(k) 1],t);',...
'plot(t,y(:,k));',...
'if (length(z)>1) ,hold on,end,',...
'end;',...
'hold off,']);

运行后得到下面图形
【Matlab图形用户界面知识点合集】新手入门第十七天_第4张图片
再形成坐标方格控制键,编写如下程序:

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');

运行后得到下图所示的静态文本和编辑框
【Matlab图形用户界面知识点合集】新手入门第十七天_第5张图片

1.2使用GUIDE创建GUI对象

在MATLAB中GUIDE提供了多种设计模板,用户可以很轻松地定制属于自己的GUI对象,同时自动生成对应的M文件框架,这样就简化了GUI应用程序的创建工作。用户可以直接使用该框架来编写自己的函数代码。GUIDE模板中包含了相关回调函数,可以打开对应的M文件,查看工作方式或者修改函数,实现用户所需要的功能。

2.定制标准菜单

在GUI控件对象中,界面菜单是一个重要组成部分。从句柄图形对象结构中,Uimenu对象的结构体系以Figure图形窗口为父对象,和Axes坐标轴、Unicontrol界面控件为平等级别的组建。
在MATLAB中,可以根据需要在GUI对象中创建标准菜单,自行设置菜单或者创建现场菜单等。同时,可以设置菜单控件的各种属性,例如添加快捷键、设置对应的回调函数等。因此,在GUI对象中,可以设置菜单控件来完成多种功能。对于比较简单的GUI对象,可以根据需要定制MATLAB图形窗口的标准菜单,设置不同的菜单属性。
【例】创建一个简单的GUI对象,根据需要定制标准菜单。
解:创建一个默认的图形窗口。在MATLAB的命令行窗口中输入下面的命令代码:
Handle_figure=figure;
查看图形结构。输入上面的代码后,按“Enter”键,得到默认的图形窗口,如下图所示。
【Matlab图形用户界面知识点合集】新手入门第十七天_第6张图片

3编写回调函数

GUI系统中,回调函数扮演着非常重要的角色。一般情况下,应用程序调用系统提供的函数完成自己的工作,系统函数由系统内部实现,应用程序调用;和系统提供的函数不同,回调函数一般有应用程序实现,由系统调用。
在C语言中,回调函数使用函数指针来实现。通常,我们需要通过某种接口告诉系统已定义好的回调函数指针,系统保存这个指针,然后在需要的时候通过这个指针来调用由应用程序定义的回调函数。

4.创建现场菜单

现场菜单就是当用户用右键选择对象后,弹出的快捷菜单选项。因此,可以认为现场菜单和某个图形对象相联系,并通过鼠标右键来激活。
创建现场菜单的一般步骤如下:
1.利用命令ufcontextnenu创建现场菜单对象;
2.利用命令uinenu来设置该现场菜单对象的具体属性;
3.利用命令set将现场菜单和图形对象联系起来。
现场菜单也属于MATLAB的图形对象之一,因此可以使用GUIDE来创建现场菜单,也可以直接使用M文件来创建现场菜单。
4.1.编写GUI的程序代码
【例】创建一个GUI画图模型
在MATLAB编辑器中输入以下代码:

clear all
clc
%建立一个图像框
fig=figure(1);
set(fig,'position',[256 198 420 360],'name','GUI example','numbertitle','off','menubar','none');
axes_h=axes('position',[0.1 0.1 0.8 0.6]);
set(gcf,'currentaxes',axes_h);
text(0.25,0.93,'\fontname{标楷体}GUI-Plot example','fontsize',15);
uicontrol(fig,'style','pushbutton','string','plot','position',[280 290 100 30],...
'callback',['x=eval(get(t1,''string''));y=eval(get(t2,''string''));'...
'p=plot(x,y);xlabel(''x'');ylabel(''y'');']);
t1=uicontrol(fig,'style','edit','position',[170 320 100 30],'string','linspace(0,2*pi)','fontsize',8);
t2=uicontrol(fig,'style','edit','position',[170 270 100 30],'string','sin(linspace(0,2*pi))','fontsize',8);
uicontrol(fig,'style','text','position',[50 320 105 30],'string',{'please input ordinate','x='});
uicontrol(fig,'style','text','position',[50 270 105 30],'string',{'please input ordinate','y='});
Option_menu=uimenu(gcf,'label','&Option');
type=uimenu(Option_menu,'label','&Type');
uimenu(type,'label','&Solid','position',1,'callback','set(p,''linestyle'',''-'')');
uimenu(type,'label','&Dashed','position',3,'callback','set(p,''linestyle'',''--'')');
uimenu(type,'label','D&otted','position',2,'callback','set(p,''linestyle'','':'')');
uimenu(type,'label','D&ashdot','position',4,'callback','set(p,''linestyle'','':'')');
symbol=uimenu(Option_menu,'label','&Symbol','separator','on');
uimenu(symbol,'label','Circle(o)','callback','set(p,''linestyle'',''o'')');
uimenu(symbol,'label','X_mark(x)','callback','set(p,''linestyle'',''x'')');
uimenu(symbol,'label','Star(*)','callback','set(p,''linestyle'',''*'')');
uimenu(symbol,'label','Diamond(d)','callback','set(p,''linestyle'',''d'')');
uimenu(symbol,'label','Triangle_up(^)','callback','set(p,''linestyle'',''^'')');
uimenu(symbol,'label','Triangle_right(>)','callback','set(p,''linestyle'',''>'')');
uimenu(symbol,'label','Hexagram(h)','callback','set(p,''linestyle'',''h'')');
color=uimenu(Option_menu,'label','&Color','separator','on');
uimenu(color,'label','&Blue','callback','set(p,''color'',''b'')');
uimenu(color,'label','&Green','callback','set(p,''color'',''g'')');
uimenu(color,'label','&Red','callback','set(p,''color'',''r'')');
uimenu(color,'label','&Cyan','callback','set(p,''color'',''c'')');
uimenu(color,'label','&Magenta','callback','set(p,''color'',''m'')');
uimenu(color,'label','&Yellow','callback','set(p,''color'',''y'')');
uimenu(color,'label','Blac&k','callback','set(p,''color'',''k'')');
Grid_menu=uimenu(gcf,'label','&Grid');
check1=uimenu(Grid_menu,'label','Gridon','callback',['set(check1,''Checked'',''on'');'... 
    'set(check2,''Checked'',''off'');GRID ON;'],'accelerator','y');
heck2=uimenu(Grid_menu,'label','Grid off','callback',['set(check2,''Checked'',''on'');'...
'set(check1,''Checked'',''off'');GRID OFF;'],'accelerator','z');
rwm=uicontextmenu;
uimenu(rwm,'label','Width_2','callback','set(p,''linewidth'',2)');
uimenu(rwm,'label','Width_4','callback','set(p,''linewidth'',4)');
uimenu(rwm,'label','Width_6','callback','set(p,''linewidth'',6)');
uimenu(rwm,'label','Width_8','callback','set(p,''linewidth'',8)');
uimenu(rwm,'label','Original','callback','set(p,''linewidth'',1)');
set(gca,'uicontextmenu',rwm);

运行程序后,得到下面的图形。
【Matlab图形用户界面知识点合集】新手入门第十七天_第7张图片
单击plot后出现下面的图形
【Matlab图形用户界面知识点合集】新手入门第十七天_第8张图片
4.2演示GUI对象
【例】绘制一条S曲线,创建一个与之相联系的现场菜单,用以控制曲线的颜色。
编写脚本M文件

clear all
clc
t=(-3*pi:pi/50:3*pi)+eps;
y=sin(t)./t; 						%制作具体菜单项,定义相应的回调
hline=plot(t,y);         				%绘制Sa曲线
cm=uicontextmenu;        				 %创建现场菜单
uimenu(cm,'label','Red','callback','set(hline,''color'',''r''),')
uimenu(cm,'label','Blue','callback','set(hline,''color'',''b''),')
uimenu(cm,'label','Green','callback','set(hline,''color'',''g''),')
set(hline,'uicontextmenu',cm)      		%使cm现场菜单与Sa曲线相联系
运行后得到下面的(蓝色线条)S曲线

【Matlab图形用户界面知识点合集】新手入门第十七天_第9张图片
将鼠标指针指向线条,右键弹出现场菜单,在选中菜单单项(如Red)后,曲线变成红色。
【Matlab图形用户界面知识点合集】新手入门第十七天_第10张图片

5.GUI对象的应用

在GUI中,用户控件是除了用户菜单之外,实现用户和计算机交互的重要途径。

5.1控件区域框

【例】创建一个界面包含3种控件:静态文本、双位按键、控件区域框。
在MATLAB编辑框口输入以下代码:

clf reset
set(gcf,'menubar','none')
set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]); 
set(gcf,'defaultuicontrolunits','normalized') 		%设置用户缺省控件单位属性值
h_axes=axes('position',[0.05,0.2,0.6,0.6]);  
t=0:pi/50:2*pi;y=sin(t);plot(t,y);
set(h_axes,'xlim',[0,2*pi]);
set(gcf,'defaultuicontrolhorizontal','left');
htitle=title('正弦曲线');
set(gcf,'defaultuicontrolfontsize',12);  		%设置用户缺省控件字体属性值
uicontrol('style','frame',...     			%创建用户控件区   
   'position',[0.67,0.55,0.25,0.25]);    
uicontrol('style','text',...      			%创建静态文本框   
   'string','正斜体图名:',...
   'position',[0.68,0.77,0.18,0.1],...
   'horizontal','left');       
hr1=uicontrol(gcf,'style','radio',...    		%创建“无线电”选择按键 
   'string','正体',...                                	%按键功能的文字标识'正体'
   'position',[0.7,0.69,0.15,0.08]);    		%按键位置
set(hr1,'value',get(hr1,'Max'));			%因图名缺省使用正体,所以小圆圈应被点黑 
set(hr1,'callback',[...          
   'set(hr1,''value'',get(hr1,''max'')),',... 		%选中将小圆圈点黑  
   'set(hr2,''value'',get(hr2,''min'')),',...		%将“互斥”选项点白 
   'set(htitle,''fontangle'',''normal''),',...		%使图名字体正体显示
  ]);         
hr2=uicontrol(gcf,'style','radio',...    		%创建“无线电”选择按键 
  'string','斜体',...                                     %按键功能的文字标识'斜体'
  'position',[0.7,0.58,0.15,0.08],...   		%按键位置
  'callback',[...
   'set(hr1,''value'',get(hr1,''min'')),',... 
   'set(hr2,''value'',get(hr2,''max'')),',... 
   'set(htitle,''fontangle'',''italic'')',... 		%使图名字体斜体显示
  ]);             
   ht=uicontrol(gcf,'style','toggle',...   	%制作双位按键    
      'string','Grid',...
      'position',[0.67,0.40,0.15,0.12],...
      'callback','grid');

运行后得到下面的图形。可以选择图名的正体或斜体,也可以增加图中栅栏。
【Matlab图形用户界面知识点合集】新手入门第十七天_第11张图片


总结

图形用户界面(GUI)是由窗口、按键、菜单、文字说明等对象构成的一个用户界面,用户通过一定的方法,选择、激活这些图形对象,实现计算、绘图等功能。以上就是今天学习的内容,一起坚持打卡哦!

你可能感兴趣的:(matlab编程,matlab,开发语言)