五、APP设计工具
1、App Designer的使用
(1)打开App Designer
- 在MATLAB命令行窗口输入appdesigner命令。
- 在MATLAB主窗口选择“主页”选项卡,单击工具栏“新建”,再选择“应用程序”下的“App Designer”。
(2)App Designer窗口
快速访问工具栏,功能区,App编辑器
(3)App编辑器
- 设计视图:用于编辑用户界面
- 代码试图:用于编辑、调试、分析代码
2、App组件
常用组件、容器组件、仪器组件
例1 :建立一个App用户界面,该界面包括1个坐标轴,2个旋钮,2个按钮和1个按钮。
(1)打开App设计器窗口,添加组
(2)利用属性面板设置组件对象的属性
(3)定义回调函数
- 设置回调属性
- 选择右键快捷菜单中的回调函数
3、App程序
App程序采用面向对象设计模式,声明对象、定义函数、设置属性和共享数据都封装在一个类中,一个MATLAB文件就是一个类的定于。
(1)类的基本结构
- properties段:属性的定义,主要包含属性声明代码
- methods段:方法的定义,由若干函数组成。回调函数只有一个数app,为界面句柄,存储界面中各个成员的数据。
classdef 类名<matlab.apps.AppBase> properties (Access=public) …… end methods (Access=private) function 函数1(app) …… end function 函数2(app) …… end end
(2)访问权限
- public:可用于与App的其他类共享数据。
- private:只允许在本类中访问。以下属性和函数的默认访问权限为private
– 属性的声明
– 界面的启动函数startupFcn
– 建立界面组件的函数createComponents
– 回调函数
例2:实现例1界面的绘图功能。
(1)绘图按钮的回调函数
function Button_2Pushed(app, event) f=eval(app.Knob_3.Value);%获取离散旋钮对象的Value属性值 theta=app.Knob_2.Value/180*pi;%获取旋钮对象的Value属性值 x=linspace(0,2*pi,100); if app.sinxButton.Value==1 y=sin(f*x+theta); else y=cos(f*x+theta); end %plot的第一个参数必须是坐标轴对象句柄 %plot函数默认的线宽是1,App程序的线宽必须小于0.4 plot(app.UIAxes,x,y,'LineWidth',0.2) end
(2)清空按钮的回调函数
function Button_3Pushed(app, event) cla(app.UIAxes) end
(3)运行App
(4)打包App应用
六、图形用户界面应用举例
在今后的版本里,GUIDE将会被删除,目前版本会提示不建议使用。所以,建议使用APP设计工具。
1、例1
(1)添加组件,并设置相应的属性。
(2)编写回调函数代码
- “选择绘图参数”组件的回调函数
if string(app.ChooseFun.Value)=='Peaks' app.ChooseFun.UserData=peaks(34); elseif string(app.ChooseFun.Value)=='Membrane' app.ChooseFun.UserData=membrane; elseif string(app.ChooseFun.Value)=='Sinc' [x,y]=meshgrid(-8:0.3:8); r=sqrt(x.^2+y.^2); sinc=sin(r)./r; app.ChooseFun.UserData=sinc; end guidata(app.UIAxes,app.ChooseFun.UserData)%更改数据,并在图窗中再次存储新数据
- “Mesh”组件的回调函数
mesh(app.UIAxes,app.ChooseFun.UserData);
- “Surf”组件的回调函数
surf(app.UIAxes,app.ChooseFun.UserData);
- “Contour3”组件的回调函数
contour3(app.UIAxes,app.ChooseFun.UserData);
- “显示网格”组件的回调函数
if app.GridsSwitch.Value==1 app.UIAxes.XGrid='on'; app.UIAxes.YGrid='on'; app.UIAxes.ZGrid='on'; app.GridsSwitch.Text='隐藏网格'; else app.UIAxes.XGrid='off'; app.UIAxes.YGrid='off'; app.UIAxes.ZGrid='off'; app.GridsSwitch.Text='显示网格'; end
- “设置”组件的回调函数
el=app.Edit_el.Value; az=app.Edit_az.Value; app.UIAxes.View=[az,el];
- “色图”组件的回调函数
colormap(app.UIAxes,app.ChooseMap.Value)
- “着色方式”组件的回调函数
if app.Faceted.Value==1 shading(app.UIAxes,'faceted'); elseif app.Interpolated.Value==1 shading(app.UIAxes,'interp'); elseif app.Flat.Value==1 shading(app.UIAxes,'flat'); end
(3)输出结果
2、例2
(1)添加组件,并设置相应的属性。
(2)编写“开始”按钮的回调函数
amr=eval(app.Knob.Value); theta=app.Knob_2.Value; x=linspace(0,10*pi,300); y=sin(x)+sin(3*x+theta)/amr; if strcmp(app.Switch.Value,'On') y=awgn(y,30); end app.Gauge.Value=max(y); plot(app.UIAxes,x,y,'LineWidth',0.1);
(3)运行结果
总结