利用matlab的appdeisgner创建两个简单的App并传递数据

   今天刚学的app传递数据,为了巩固一下知识,做了个简单的app,希望能帮到大家。两个app之间传递数据,最难的部分就是如何让两个app去建立联系,还有在一个app中可能需要用另一个app的内容作为初始化内容。下面是基本的模板:

(主)

(辅)

 首先第一步就是把最基本的模板给布置好,并把每个控件的功能给想好,我的模板要完成的功能是点击主界面的add会将辅界面给打开,在辅界面中将信息输入,点击sure,将把信息放在主界面的表格中。

第二步先将主界面进行初始化:

 function startupFcn(app)
            app.UITable.ColumnName(1)={'姓名'};
            app.UITable.ColumnName(2)={'学号'};
            app.UITable.ColumnName(3)={'班级'};
            app.UITable.ColumnName(4)={'年级'};
            app.UITable.ColumnName(5)={'身份'};
        end

 第三步,因为要将辅界面得到内容更新到主界面,所以要在主界面中创建一个全局函数updata(其功能就是将数据更新到主界面);代码如下:

    methods (Access = public)
        
        function updata(app,name,number,class,year,identity)
            app.NAME=name;
            app.NUMBER=number;
            app.CLASS=class;
            app.YEAR=year;
            app.IDENTITY=identity;
            team={string(name) string(number) string(class) string(year) string(identity)};
            app.UITable.Data=[app.UITable.Data;cell2table(team)];
        end
    end
    

 其中全局变量有:

    properties (Access = private)
        NAME;
        NUMBER;
        CLASS;
        YEAR;
        IDENTITY;
    end

第四步就是让主界面去调用辅界面,按下add控件就将其打开(如果不让辅界面也有初始化的数据内容,那么就不需要在app2(app, , , ,)里面再加别的参数,如果需要初始化数据,则需要在里面添加参数,然后在app2中显示出来,显示是在app2的startupfcn中完成的,app2(app)与app2的初始化函数是对接的关系),代码如下:

function addButtonPushed(app, event)
            app.addButton.Enable='off';
            app2(app);
        end

这样就将app2给打开了;

第五步对app2进行初始化(里面的参数直接与app2(app)里面的参数对接,因为在app2(app)里面没有加别的参数,所以这里面的参数除了mainapp其他都可忽略,mainapp的作用是告诉app2主界面是app1),代码如下:

        function startupFcn(app, mainapp, name, number, class, year, identity)
            app.ListBox.Items(1)={'班长'};
            app.ListBox.Items(2)={'团支书'};
            app.ListBox.Items(3)={'普通干部'};
            app.ListBox.Items(4)={'学生'};
            app.DropDown.Items(1)={'2020'};
            app.DropDown.Items(2)={'2021'};
            app.DropDown.Items(3)={'2022'};
            app.DropDown.Items(4)={'2023'};
            app.Node.Text='通信工程';
            app.Node_2.Text='一班';
            app.Node_3.Text='二班';
            app.Node_4.Text='三班';
            app.callingapp=mainapp;
        end

第六步数控件的使用,就是判断其下方还有没有子节点,如果有就让他继续选择,如果没有就将现在点击的部位显示的内容返回过来;代码如下:

function TreeSelectionChanged(app, event)
            selectedNodes = app.Tree.SelectedNodes;
            if isempty(selectedNodes.Children)
                app.a1=selectedNodes.Text;
            else
                app.a1='';
            end
        end

第七步让app2中输入的数据更新到app1的表格当中,就是去调用app1中的全局函数updata(一定是个公有的全局函数),代码如下:

        function sureButtonPushed(app, event)
            updata(app.callingapp,app.EditField.Value,app.EditField_2.Value,string(app.a1),string(app.DropDown.Value), string(app.ListBox.Value))
            app.callingapp.addButton.Enable='on';
            delete(app);
        end

这样就将数据给返回给表格;

最后要想去在app2中调用app1的button控键,需要在app2中建立一个全局变量,用来读取mainapp,然后调用这个全局变量.。。。button即可,若想让app1里面的控件不可使用,可以:app.callingapp.addButton.Enable='off';即可

MATLAB中,可以使用多种方法在不同的GUI(图形用户界面)之间传递数据,这里列举几种常见的做法: 1. **回调函数**: 当一个按钮或选择列表等控件被激活时,你可以通过设置它的`Callback`属性来执行一段包含数据交换的自定义函数。在这个函数内部,可以直接访问其他GUI对象的变量。 2. **Global Variables**: 可以在全局工作空间中定义变量,然后在多个GUI中共享。不过这种方法应该谨慎使用,因为过多的全局变量可能导致代码难以管理。 3. **Data Callbacks**: 对于某些特定组件(如Axes、Table等),可以设置`DataFcn`回调函数,当数据发生变化时执行该函数,然后将数据传递给另一个GUI。 4. **Matlab UserData**: 在创建GUI组件时,可以为每个组件设置`UserData`,这是一种存储任意类型数据的有效方式。在需要传递数据时,从一个GUI获取UserData,再传入另一个GUI。 5. **Handle Graphics Objects**: 如果两个GUI都在同一个应用程序中,可以利用它们共享的AppHandle来间接传递数据。例如,可以通过修改UI组件的属性或状态来传递信息。 6. **Cell Arrays or Structures**: 你可以使用cell数组或结构体作为数据载体,一个GUI修改并返回这个载体,另一个GUI接收它进行处理。 示例: ```matlab % 在第一个GUI中 global data; data.value = get(handles.myButton, 'String'); % 获取按钮文本 function sendDataButton_Callback(hObject, eventdata, handles) % ... 生成数据,赋值给handles.data guidata(hObject, handles); % 更新当前GUI的 UserData % 在第二个GUI中 value = guidata(gcf).data.value; % 从第二个GUI获取数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值