0 Star 0 Fork 0

雀成 / Matlab Appdesigner简单UI

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

appdesigner

图形用户界面(GUI)也称为应用程序,提供对软件应用程序的点击控制,从而无需学习其他语言或键入命令来运行应用程序, 可以打包成matlab内部app或桌面应用. 传统的guide也可以做ui, 但用起来不如appdesigner好用, 已经即将要被淘汰了.

在matlab命令行输入appdesigner即可进入

在这里插入图片描述

在这里插入图片描述

首页有比较多实例, 这些可以慢慢看, 我们先新建空白app

在这里插入图片描述

左边有很多MATLAB之前就设置好的UI组件,可以直接拖动到画布上使用, 中间可以切换查看设计视图和代码。代码区的灰色代码是不可更改的, 右边为组件浏览器, 可以查看和编辑组件属性.

杨氏干涉

我们有一个已写好的杨氏干涉程序

clear,clc;
%波长(典型值:600)
Lambda = input('输入光的波长(单位为nm):');
Lambda = Lambda * 1e-9;
%缝间隙(典型值:1)
d = input('输入两个缝的间距(单位为mm):');
d = d * 1e-3;
%缝到屏的距离(典型值:1)
D = input('输入缝到屏的距离(单位为m):');
%设置空间坐标的边界
Xmax = 3 * Lambda * D/d; 
Ymax = Xmax;
Tmax = Xmax;
%坐标取样1001份
x = linspace(-Xmax, Xmax, 1001);      
y = linspace(-Ymax, Ymax, 1001);
t = linspace(-Tmax, Tmax, 1001);
%生成二维网格
[x, y] = meshgrid(x, y);
%计算复振幅
r1 = sqrt((x+d/2).^2+D^2);   
r2 = sqrt((x-d/2).^2+D^2);
phi = 2*pi*(r2-r1)/Lambda;  
E1 = 1;
E2 = 1 * exp(-1i * phi);
E = E1 + E2;
%合成波光强
I = abs(E) .^ 2; 
I = I ./ 4;
%取y轴的中线处的光强
I0 = I(501, :);     
%合成光强灰度分布图
subplot(2,1,1);     
imshow(I);            
xlabel('空间坐标x');
ylabel('空间坐标y');
title('杨氏双缝干涉合成光强空间分布');
% 合成光强函数分布图
subplot(2,1,2);
%设置坐标轴
axis([-Tmax,Tmax,0,1]);
plot(t, I0);
xlabel('空间坐标x'), ylabel('合成光强度');
title('杨氏双缝干涉合成光强空间分布函数');

程序的效果是输入光波波长, 双缝间隙和屏缝距离, 输出干涉结果和光强度分布.

在这里插入图片描述

但一次次手动输入太麻烦了, 对该变量的认识也不够直观, 我们想将所有输入量改为实时输入, 改动一个变量就能查看输出结果.

组件摆放

从左边的组件库中拖进来三个滑块组件, 放好位置, 在中间修改长度和名字, 在右边的组件浏览器的ValueLimit分别修改三个滑块的默认值和范围

在这里插入图片描述

再从组件库中拖进来三个坐标区, 两个用来显示实时图像, 一个可以显示原理图或者北京, 再在右边修改它们的标题和坐标轴

在这里插入图片描述

代码

点击中间区域右上角的代码视图进入代码区, 点击菜单-属性-公共属性添加公共类, 这可以理解为一些全局变量, 因为有三个输入控件, 一个量在修改时其他量都不能改变, 这里把所有变量都定义为全局变量

properties (Access = public)
    Property % Description
    Lambda = 600 * 1e-9 % 输入光的波长(单位为nm)
    d = 1 * 1e-3% 输入两个缝的间距(单位为mm)
    D = 1 % 输入缝到屏的距离(单位为m)
    Xmax,Ymax,Tmax % 空间坐标边界
    x,y,t % 绘图变量
    r1,r2 % 光源距离
    phi % 相位差
    E1,E2,E % 合成波
    I,I0 % 光强
end

在其他函数中调用全局变量时, 都需要加一个前缀app., 包括函数名和组件的调用.

点击代码浏览器一个绿色的+号, app选择YoungS(工程的名字),回调选StartupFcn, 添加初始函数.

在这里插入图片描述

在启动函数第一行我们可以显示原理图imshow('杨氏双缝干涉.png','Parent',app.UIAxes3);, 和matlab代码其实一样, 只是最后多了app.UIAxes3, 就是图像要显示到哪一个窗口, 窗口对应的窗口名可在组件浏览器看到.

然后就是计算显示部分, 所有全局变量的调用都带有前缀app.

function startupFcn(app)
    app.Xmax = 3 * 600*1e-9 * app.D/app.d;
    app.Ymax = app.Xmax;
    app.Tmax = app.Xmax;
    %坐标取样1001份
    app.x = linspace(-app.Xmax, app.Xmax, 1001);
    app.y = linspace(-app.Ymax, app.Ymax, 1001);
    app.t = linspace(-app.Tmax, app.Tmax, 1001);
    %生成二维网格
    [app.x, app.y] = meshgrid(app.x, app.y);
    %计算复振幅
    app.r1 = sqrt((app.x+app.d/2).^2+app.D^2);
    app.r2 = sqrt((app.x-app.d/2).^2+app.D^2);
    app.phi = 2*pi*(app.r2-app.r1)/app.Lambda;
    app.E1 = 1;
    app.E2 = 1 * exp(-1i * app.phi);
    app.E = app.E1 + app.E2;
    %合成波光强
    app.I = abs(app.E) .^ 2;
    Imax1 = max(max(app.I));app.I = app.I ./ Imax1;

然后再显示到两个坐标图组件上

imshow(app.I,'Parent',app.UIAxes);
app.I0 = app.I(501, :);
axis(app.UIAxes2,[-0.0018,0.0018,0,1]);
plot(app.UIAxes2,app.t, app.I0);

这时点一下菜单栏的运行, 就会以默认值绘图

在这里插入图片描述

这时三个滑块还是没有作用的, 我们回到设计视图, 右击光波长滑块, 添加回调函数ValueChangingFcn, 意思是每当这个滑块被拖动, 值发生改变, 就会执行这个函数, 另一个ValueChangedFcn则是滑块拖动结束时才执行一次函数.

在这里插入图片描述

在代码视图中找到刚刚添加的回调函数, event.Value是此刻滑块的数值, 我们获取他并再次计算绘图

function T1LambdaValueChanging(app, event)
    %% T1 波长(典型值:600)
    app.Lambda = event.Value * 1e-9; % 获取改变的波长值
    app.phi = 2*pi*(app.r2-app.r1)/app.Lambda;
    app.E2 = 1 * exp(-1i * app.phi);
    app.E = app.E1 + app.E2;
    %合成波光强
    app.I = abs(app.E) .^ 2;
    Imax1 = max(max(app.I));app.I = app.I ./ Imax1;
    imshow(app.I,'Parent',app.UIAxes);
    app.I0 = app.I(501, :);
    plot(app.UIAxes2,app.t, app.I0);

这时再运行, 每次拖动这个滑块时都会执行一次回调函数并重新绘图, 就可以查看干涉条纹随波长变化的实时变化了.

剩下两个滑块的原理也是一样的, 自行添加即可.

打包

在上方设计工具 - 共享可以看到三个打包选项

MATLAB App

在这里插入图片描述

第一个可以得到一个mlappinstall文件, 可以在matlab主界面的app处安装, 之后在这里可以打开使用

在这里插入图片描述

独立桌面 APP

这里生成的是一个exe文件, 可以自定义启动界面和图标, 但exe文件需要matlab的runtime运行环境, 还是需要在有matlab的设备上, 或者将运行环境整个打包, 但这样软件体积就会非常庞大.

下载

关注公众号小电动车,下载工程文件

空文件

简介

matlab Appdesigner 制作的简单UI界面 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/Wind_to_valley/Appinventor.git
git@gitee.com:Wind_to_valley/Appinventor.git
Wind_to_valley
Appinventor
Matlab Appdesigner简单UI
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891