利用Matlab App Designer简单设计程序
一、前言
4月末,抽空总结一下近日来利用Matlab App Designer快速设计应用程序(.exe)的一些经验,也方便以后自己回顾。动机非常简单,就是需要把之前在.m文件中写的程序,做成一个通用的应用程序,能够在未安装Matlab的计算机上使用。
主要步骤如下:
.m文件(Matlab脚本文件,即原文件)>>.mlapp文件(Matlab设计出来的App文件,但是要依赖Matlab才能运行)>>.exe文件(目标文件,能够在未安装Matlab的计算机上使用的文件)
- 第一步:.m文件>>.mlapp文件。根据个人的需求,确定界面的布局,输入和输出;
- 第二部:.mlapp>>.exe文件。这部分比较简单。
接下来的内容,主要讲如何使用一些组件实现一定的功能,以及如何将.mlapp打包成.exe文件,并在未安装Matlab的计算机上运行。
二、App Desiger组件的使用
1.所用组件及其属性
仅介绍我所用到的几个组件,如下图:
1、编辑字段(数值),即Edit Field:用于输入或显示一个数值;
2、滑块,即Slider:利用滑块输入或显示一个数值;
3、按钮,即Button:点击触发回调(一般用作输入),区别于状态按钮,状态按钮是点一下改变一下状态,而按钮只有一个状态;
4、文本区域,即Text Area:输入或显示文本;
5、坐标区:一般用于绘图(用作输出)。
1.1 编辑字段(数值),即Edit Field
拖动组件“编辑字段(数值)”至画布,在右侧“组件浏览器”会出现对应的“app.EditField”,这就是所创建“编辑字段(数值)”组件的代码表示。
点击所创建的“编辑字段(数值)”在右侧“检查器”能够改变其一些属性。如下图:
其中,值的部分:
- Value:初始值设置
- Limits:输入范围或输出范围设置
字体部分就是调整标注字体,其它暂时没用到,未作深究。
1.2 滑块,即Slider
拖动组件“滑块”至画布,在右侧“组件浏览器”会出现对应的“app.Slider”,这就是所创建“滑块”组件的代码表示。
点击所创建的“滑块”在右侧“检查器”能够改变其一些属性,可以看出,Slider的属性比Edit Field多了一个刻度选项,用于改变滑块刻度,可以自行设置MajorTicks来改变滑块的主要刻度。
1.3 按钮,即Button
拖动组件“按钮”至画布,在右侧“组件浏览器”会出现对应的“app.Button”,这就是所创建“按钮”组件的代码表示。
其属性没啥好介绍的,就是要注意一点,组件库中有“按钮”和“状态按钮”两个组件,后者有两个状态,按一次状态改变,而前者只有一个状态,一般仅作触发,而触发是通过组建的回调函数实现的,下一节介绍组件的回调函数。
1.4 文本区域,即Text Area
拖动组件“文本区域”至画布,在右侧“组件浏览器”会出现对应的“app.TextArea”,这就是所创建“文本区域”组件的代码表示。
其属性没啥好介绍的,会在接下来使用中介绍一些与其相关代码。
1.5 坐标区
拖动组件“坐标区”至画布,在右侧“组件浏览器”会出现对应的“app.UIAxes”,这就是所创建“坐标区”组件的代码表示。
其属性也没啥好介绍的,一般都作为输出,用来绘图。在接下来使用中将介绍一些与其相关代码。
1.6 下拉框,即Drop Down
拖动组件“下拉框”至画布,在右侧“组件浏览器”会出现对应的“app.DropDown”,这就是所创建“下拉框”组件的代码表示。
点击所创建的“下拉框”在右侧“检查器”能够改变其一些属性,可以看出,“下拉框”众多了一个“Items”属性,这里定义其选项,而ItemsDate则定义选项对应的数据,如果缺省,则Items也作为数据。
2.组件的回调函数及组件使用案例
组件的回调是App Designer的精髓所在,人和组件的交互是通过组件的回调函数实现的。以下先介绍上述组件的回调函数,并且给出一些实用案例。
1.1 各组件的回调函数
- Editfield:该组件只有一个回调函数,即EditfieldValueChanged,顾名思义,当该组件的人为输入值变化后,触发进入该组件的回调函数。
- Slider:该组件有两个回调函数,即SliderValueChanged和SliderValueChanging,前者在滑块的人为输入值变化后触发,而后者在滑块的人为输入值变化时触发。
- Button:有一个回调函数ButtonPushed,当Button被按下时触发。
- TextArea:有一个回调函数,TextChangedFcn,没用过这个回调,因为我把当作一个输出组件。
- UIAxes:没有回调,单纯作为输出。
- DropDown:有一个回调函数,DropDownValueChanged,在下拉框中选择结束后,触发。
1.2 组件使用案例
1.2.1 EditField和Slider交互
需要实现的功能是Editfield的人为输入值改变,Slider的值也相应改变;而Slider的人为输入值改变,Editfield的值也会改变。
对于前者,需要在EditFireldValueChanged回调函数中加入以下代码:
value = app.EditField.Value; % 读取当前EditField中的值
app.Slider.Value=value; % 赋给Slider
对于后者,则需要在SliderValueChanged(调整结束后EditField中的值改变)/SliderValueChanging(调整时EditField中的值改变)中加入以下代码:
%SliderValueChanged
changedValue = event.Value; % 读取当前Slider中的值
app.EditField.Value=changedValue; % 赋给EditField
%SliderValueChanging
changingValue = event.Value; % 读取当前Slider中的值
app.EditField.Value=changingValue; % 赋给EditField
1.2.2 DropDown
使用DropDown时,得到的不是一个数值,而是一个字符,如果需要运算,需要利用str2double将其转换成双精度数字:
value = app.DropDown.Value; % value不是双精度类型数字,不能直接参与运算
value2= app.EditField_2.Value; % value2是双精度类型数字
P1=str2double(value);
P2=value2;
app.EditField.Value=P1/P2*100;
1.2.3 Button
如果有许多变量需要用户输入,而且主程序比较大时,可以利用Button来简化代码,即Editfield和Slider中不加入主程序,仅作为一个输入接口。只有当Button被按下时,才会调用ButtonPushed运行主程序,而主程序需要的所有参数可以通过app.EditField.Value/app.Slider.Value等获取。
另外可以通过以下代码显示程序运行时间等信息:
st=cputime; % 程序开始运行时的cpu时间
%主程序
%......
% 程序结束
et=cputime-st; % 计算程序运行所用的时间
str{1}='程序运行完毕。';
str{2}=['总用时为: ',num2str(et),' s']; % 将数字转换成字符,并和其它字符组合
app.TextArea.Value=str; % 将信息在TextArea中显示
msgbox('程序运行完毕,请点击确定查看结果','信息提示'); % 弹出对话框,提示程序运行完毕
1.2.4 UIAxes
主要介绍一下在APP Designer中的plot的用法:
plot(app.UIAxes,x(1:T_num),fn+fn*delta_f(1:T_num));
hold(app.UIAxes,'on') % 即hold on
plot(app.UIAxes,x(1:T_num),fn+fn*delta_f_WF_PD(1:T_num));
plot(app.UIAxes,x(1:T_num),fn+fn*delta_f_nWF(1:T_num));
legend(app.UIAxes,'\rm\fontname{Times new roman}_{MPC}',...
'\rm\fontname{Times new roman}_{Droop}',...
'\rm\fontname{Times new roman}_{nWF}'); %Legend
hold(app.UIAxes,'off') % 记得关上
3.将做好的App打包转换成.exe文件
接下来的步骤比较简单,按部就班来就可以了。
首先打开左上角共享中的第三项“独立桌面App”。
会出现如下界面,接下来将对每个标号部分进行介绍。
- 选择Runtime来源:用Matlab设计的App,在其他电脑上运行时,需要用到Runtime这个东西,这个地方选择它的来源。这里如果选择第一项,即“Runtime downloaded from web”,则在用户电脑上安装.exe时,会从网上下载Runtime,这样对于用户来说速度很慢;而如果选择第二项,即“Runtime included in package”,则是我们制作.exe程序时,就将Runtime打包进去,虽然文件比较大,但是用户使用的时候不需要再下载,速度快。建议选择第二项。
- 设置,里面可以设置一些导出文件的位置。
- 3、6和7建议选择成一张图片,涉及.exe安装图标和桌面图标等。
- 程序名字,不能包含中文字符。
- 一些程序信息(如作者、公司、联系方式、描述等),可以写,也可以不写。
4.写在最后
这是一个入门的帖子,对于Matlab App Designer,我也刚学习不久,若有错误,望批评指正。