利用Matlab App Designer简单设计程序

本文详细介绍了如何使用MatlabAppDesigner设计交互式应用程序,包括EditField、Slider、Button、TextArea、UIAxes和DropDown等组件的使用,以及它们的回调函数。此外,还阐述了如何将App打包成.exe独立文件,以便在未安装Matlab的计算机上运行。文章以实例展示了组件间的交互和绘图功能,是MatlabAppDesigner初学者的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、前言

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:该组件有两个回调函数,即SliderValueChangedSliderValueChanging,前者在滑块的人为输入值变化后触发,而后者在滑块的人为输入值变化时触发。
  • 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”。
独立桌面App
会出现如下界面,接下来将对每个标号部分进行介绍。
设置

  1. 选择Runtime来源:用Matlab设计的App,在其他电脑上运行时,需要用到Runtime这个东西,这个地方选择它的来源。这里如果选择第一项,即“Runtime downloaded from web”,则在用户电脑上安装.exe时,会从网上下载Runtime,这样对于用户来说速度很慢;而如果选择第二项,即“Runtime included in package”,则是我们制作.exe程序时,就将Runtime打包进去,虽然文件比较大,但是用户使用的时候不需要再下载,速度快。建议选择第二项
  2. 设置,里面可以设置一些导出文件的位置。
  3. 3、6和7建议选择成一张图片,涉及.exe安装图标和桌面图标等。
  4. 程序名字,不能包含中文字符。
  5. 一些程序信息(如作者、公司、联系方式、描述等),可以写,也可以不写。

4.写在最后

这是一个入门的帖子,对于Matlab App Designer,我也刚学习不久,若有错误,望批评指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值