qq_46151004 2023-09-21 13:20 采纳率: 2.6%
浏览 36
已结题

matlab m文件如何与matla app designer 数据交互?

以下是matlab m文件向 matlab app designer textarea 写数据,结果提示报错,如何改进呢?

img

  • 写回答

6条回答 默认 最新

  • Leodong. 2023-09-21 14:02
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    在 MATLAB 中,你可以通过使用句柄对象实现 MATLAB M 文件与 MATLAB App Designer 之间的数据交互。然而,你提供的代码中存在一些问题。

    首先,你需要获取正确的 App Designer 对象句柄。使用 matlab.apps.AppBase 是不正确的方式。正确的方式是通过实例化你的 App Designer 类来获取句柄对象。假设你的 App Designer 类名为 YourAppDesignerClassName,你可以按照以下方式获取句柄对象:

    appDesignerObj = YourAppDesignerClassName;
    

    接下来,你可以使用句柄对象来访问和修改 App Designer 类中的属性。确保你已在 App Designer 类中定义了一个名为 logline 的属性。如果该属性不存在或没有公共访问权限,你将无法直接通过句柄对象进行访问。

    假设你在 App Designer 类中正确定义了 logline 属性,并为其提供了公共访问权限,你可以按照以下方式设置该属性的值:

    appDesignerObj.logline = 11;
    

    最后,如果你想更新 App Designer 中的 textarea 控件以显示新的数据,你可以在设置属性值后调用 drawnow 函数来触发刷新。在 MATLAB App Designer 中,drawnow 函数用于强制刷新图形界面。在你的代码中添加以下行:

    drawnow;
    

    这样,当你修改 logline 属性后,textarea 控件应该会更新以显示新的数据。

    请注意,确保你在 M 文件中正确引用了 App Designer 类,并将 YourAppDesignerClassName 替换为你实际的类名。

    希望这些信息能帮助你改进代码并实现 MATLAB M 文件与 MATLAB App Designer 之间的数据交互。如果你还有其他疑问,请随时提问。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论
  • 数据大魔王 2023-09-21 16:25
    关注

    检查属性名称:首先确保你要写入的属性名称是正确的,包括大小写。属性名称在App Designer中定义,你需要确保它的拼写正确且与你尝试写入的属性匹配。

    确认属性存在:确保在你的App Designer应用程序类中定义了名为"logline"的属性。你可以在App Designer的左侧窗格中的"Code View"中查看类的定义,确保属性存在。

    属性可访问性:检查属性的可访问性。如果属性是私有的,你可能需要在类中添加一个公共方法来设置属性的值,并从你的M文件中调用该方法。

    确保正确引用:确保你在M文件中正确引用了App Designer应用程序类。你应该在M文件中使用app来引用你的App Designer应用程序对象,然后使用点操作符来访问属性。例如:

    
    app.logline = '要写入的数据';
    
    
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 19:41
    关注

    【以下回答由 GPT 生成】

    解决方案

    在Matlab的App Designer中实现与Matlab M文件之间的数据交互,可以通过以下步骤来实现:

    1. 在App Designer中,创建一个文本区域组件(例如TextArea),用于显示来自Matlab M文件的数据。

    2. 在你的Matlab M文件中,将要写入到文本区域的数据存储在一个变量中。

    3. 在App Designer中,创建一个按钮(Button)或者其他触发器控件,用于触发数据写入操作。

    4. 在按钮的回调函数中,调用你的Matlab M文件,将数据写入到文本区域。

    下面是一个实际的代码示例:

    App Designer的代码

    classdef MyApp < matlab.apps.AppBase
        properties (Access = private)
            UIFigure   matlab.ui.Figure
            TextArea   matlab.ui.control.TextArea
            Button     matlab.ui.control.Button
            Data       double
        end
    
        methods (Access = private)
            % 按钮的回调函数
            function ButtonPushed(app, ~)
                % 调用你的Matlab M文件,将数据写入到文本区域
                app.Data = YourMatlabMFunction();
                app.TextArea.Value = num2str(app.Data);
            end
        end
    
        % App 设计与创建
        methods (Access = private)
            function createComponents(app)
                % 创建 App 的 UI 界面
                app.UIFigure = uifigure;
                app.UIFigure.Position = [100 100 240 180];
                app.UIFigure.Name = 'My App';
    
                app.TextArea = uitextarea(app.UIFigure);
                app.TextArea.Position = [40 80 160 60];
    
                app.Button = uibutton(app.UIFigure, 'push');
                app.Button.Position = [85 30 70 22];
                app.Button.Text = 'Write Data';
                app.Button.ButtonPushedFcn = createCallbackFcn(app, @ButtonPushed, true);
            end
        end
    
        % App 启动及关闭
        methods (Access = public)
            % 创建 App 的启动函数
            function app = MyApp()
                % 创建并显示 App 的 UI
                createComponents(app)
    
                % 初始化数据变量
                app.Data = 0;
            end
    
            % 运行 App
            function run(app)
                % 显示 App 的 UI
                app.UIFigure.Visible = 'on';
            end
        end
    
        methods (Access = public)
            % 回调函数隐藏用于初始化组件的代码
            function app = run(app)
                run(app);
            end
        end
    
        methods (Access = public)
            % App 析构的回调函数
            function delete(app)
                % 删除 App 的 UI 对象
                delete(app.UIFigure);
            end
        end
    end
    

    你的Matlab M文件的代码

    function data = YourMatlabMFunction()
        % 在这里处理数据,然后返回结果
        data = [1 2 3 4 5];
    end
    

    以上代码示例中,我们创建了一个App Designer的App,其中包含一个文本区域(TextArea)、一个按钮(Button)和一个变量(Data)。在按钮的回调函数中,我们调用了你的Matlab M文件,将数据写入到文本区域。

    请注意修改YourMatlabMFunction函数,以适应你的实际数据处理逻辑。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • 心梓知识 2023-09-23 01:21
    关注

    结合GPT给出回答如下请题主参考
    要将m文件中的数据与Matlab App Designer中的组件交互,可以使用以下方法:

    1. 在App Designer中创建一个TextArea组件(或任何您希望显示数据的组件),将其命名为textArea1。

    2. 在m文件中,使用以下代码将数据写入该组件:

    app = actxserver('Matlab.Application');
    textArea = app.ITEM('textArea1');
    textArea.Value = 'Your data here';
    
    1. 在写入数据之前,确保App Designer应用程序已经打开。如果没有打开,请使用以下代码打开它:
    appDesignerPath = 'path/to/your/app/designer/file';
    system(['start matlab -r "load(''', appDesignerPath, ''');appdesigner"']);
    
    1. 如果在写入数据时遇到错误,则可能是因为App Designer应用程序尚未完全加载。您可以尝试在写入数据之前使用以下代码等待应用程序加载完成:
    while ~ishandle(appdesigner) || ~isvalid(textArea1)
        pause(0.1);
    end
    

    这里是完整的代码示例:

    在App Designer中,创建一个TextArea组件命名为textArea1,复制以下代码到 MATLAB 编辑器中保存为名为“myScript.m”的文件中:

    % Load the App Designer file and start the App Designer app
    appDesignerPath = 'path/to/your/app/designer/file';
    system(['start matlab -r "load(''', appDesignerPath, ''');appdesigner"']);
    
    % Wait for the App Designer app to start and the components to load
    while ~ishandle(appdesigner) || ~isvalid(textArea1)
        pause(0.1);
    end
    
    % Write data to the TextArea component in the App Designer app
    app = actxserver('Matlab.Application');
    textArea = app.ITEM('textArea1');
    textArea.Value = 'Hello from my m-file!';
    

    运行此代码,如果一切顺利,您应该会在App Designer中的TextArea组件中看到“Hello from my m-file!”的文本。

    评论
  • Minuw 2023-09-21 13:26
    关注

    参考gpt
    在MATLAB App Designer中,可以使用句柄对象来与App Designer界面中的组件进行交互。以下是一种正确的方式来向App Designer中的TextArea组件写入数据:

    1. 在App Designer中,确保您的TextArea组件的Tag属性已设置为"TextArea"。这将允许您在MATLAB代码中通过句柄对象访问该组件。

    2. 在MATLAB代码中,首先获取App Designer对象的句柄:

    appDesignerObj = app.YourAppDesignerClassName;
    

    确保将"YourAppDesignerClassName"替换为您的App Designer类的名称。

    1. 使用句柄对象来设置TextArea组件的String属性,以写入数据:
    appDesignerObj.TextArea.Value = 'Hello, World!';
    

    在上述示例中,我们将TextArea组件的Value属性设置为"Hello, World!"。

    请注意,根据实际情况修改句柄对象的名称和TextArea组件的Tag属性。

    评论
  • 专家-赤兔[在线] 2023-09-21 13:37
    关注

    引用 皆我百晓生 小程序回应内容作答:
    报错的原因是因为没有正确创建 appDesignerObj 对象,以及没有正确调用 appDesignerObj 的 logline 属性。

    在 MATLAB 中,使用 app designer 创建的 App Designer 应用程序的类名通常为 "app",而不是 "matlab.apps.AppBase"。所以你需要将 "matlab.apps.AppBase" 替换为你的类名 "app"。另外,你也需要先创建一个 app 对象,然后再通过该对象来操作 app 的属性和方法。

    以下是正确的代码示例:

    appDesignerObj = app;  % 请将 app 替换为你的类名
    appDesignerObj.logline = '11';  % 设置 logline 属性的值
    

    请确保将 "app" 替换为你实际的类名。如果你的类名不是 "app",可以在 MATLAB 命令窗口中输入 "help YourAppClassName" 来获取你的类的相关信息。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日
  • 创建了问题 9月21日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色