一些matlab的初学者,可能想要实现类似于其他编程工具的多窗口调用及窗口间数据共享,但不知道在matlab中怎么实现,其实,matlab本身提供了这样的示例,下面结合matlab的官方示例,说一下这个多窗口调用的实现。

1、打开matlab,新建两个app,一个是主app,一个是二级app,分别命名为mainapp和testapp。
在这里插入图片描述
2、在mainapp添加一个按钮和一个文本控件,当按下按钮时,调用testapp。在testapp同样一个按钮和文本控件,当我们在testapp的文本框中输入一个值后,点击testapp的按钮,关闭testapp,同时将testapp文本中输入的值传回mainapp中,并显示在mainapp的文本框中。
在这里插入图片描述
在这里插入图片描述
3、编写程序,当框架搭好后,就需要编写程序,在内部实现数据共享和事件触发。

mainapp:
(1)、添加私有属性(只能在mainapp中调用)

 properties (Access = private)
        diaapp % test app
        tv=1;  % textvalue
    end

matlab的属性,可以理解为变量,私有属性只可以在当前app中调用,如果想要其他app也能调用,就需要添加公有属性。
(2)、添加公有函数(可以在mainapp和testapp都调用)

  methods (Access = public)
        
        function textvalue(app,x)
            app.tv=x;
            app.EditField.Value=num2str(x);
            app.Button.Enable='on';
            
        end
    end

添加共有函数,然后在代码区加入自己的程序,本例中即将函数的变量值赋予文本框的value。

(3)添加按钮事件回调、关闭app回调、初始启动回调等各种事件回调,打到连接和传递的目的。

 
        function startupFcn(app)      起动回调
            textvalue(app,app.tv)
        end

        % Button pushed function: Button
        function ButtonPushed(app, event)     按钮回调
            app.diaapp=testapp(app,app.tv);
            app.Button.Enable='off';
        end

        % Close request function: UIFigure
        function UIFigureCloseRequest(app, event)     关闭回调
            delete(app.diaapp)
            delete(app)
            
        end

testapp:
(1)、添加私有函数

  properties (Access = private)
        callapp % main app
    end

testapp里添加的callapp变量用于接收mainapp。
(2)添加各种回调:

    % Code that executes after component creation
        function startupFcn(app, mainapp, tv)     起动回调
            app.callapp=mainapp;
            app.EditField.Value=num2str(tv);
        end

        % Button pushed function: Button
        function ButtonPushed(app, event)       按钮回调
            textvalue(app.callapp,app.EditField.Value)   调用mainapp的共有函数
            delete(app)
        end

        % Close request function: UIFigure
        function UIFigureCloseRequest(app, event)   关闭回调
            app.callapp.Button.Enable='on';
            delete(app)
            
        end

运行:
在这里插入图片描述
源代码下载:(免费)
https://download.csdn.net/download/normer123456/25199408

matlab官方示例链接:https://ww2.mathworks.cn/help/releases/R2018b/matlab/creating_guis/creating-multiwindow-apps-in-app-designer.html
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐