qq_46151004 2023-09-20 03:54 采纳率: 1.8%
浏览 13
已结题

matlab m文件如何打印到matlab app.textarea

matlab m文件如何打印到matlab app.textarea
现状:
m文件中有打印函数disp,需要打印到matlab app 界面,m文件打印命令如下

img


matlab app 调用命令如下

img


matlab app 定义公共变量如下

img


报错结果如下

img


问题总结
就是m文件中的打印参数 logline(已定义为公共变量 global logline)没有传递到matlab app 所以不认识logline 参数。
请问各位
1.若按照此方法应该如何改进才能打印到matlab app.textarea中?
2.还有其他方法实现m文件参数打印到matlab app.textarea中吗?

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-20 04:06
    关注

    引用 皆我百晓生 小程序回复内容作答:
    要将Matlab M文件中的打印信息显示到Matlab App的textarea中,可以使用App Designer的控件回调函数的方式来实现。具体步骤如下:

    1. 在App Designer中创建一个textarea控件,设置其Tag属性为"appTextArea"。

    2. 在M文件中的disp函数中,将要打印的信息保存到一个变量中,例如logline。

    3. 在M文件中添加以下代码,以将logline的值传递给Matlab App的textarea控件:

    % 在M文件中获取App实例
    app = matlab.apputil.getRunningAppInstance;
    
    % 将logline的值赋给App的textarea控件
    app.TextArea.Value = logline;
    
    1. 在Matlab App的控件回调函数中,调用M文件中的函数,并在函数返回后将打印的信息显示到textarea控件中,可以使用以下代码:
    % 获取M文件中的打印信息
    logline = myPrintFunction();
    
    % 将打印信息显示到textarea控件中
    app.appTextArea.Value = logline;
    

    这样,当点击Matlab App中的按钮等触发控件回调函数时,就会将M文件中的打印信息显示到Matlab App的textarea控件中。

    另外,如果想要在M文件中直接将打印信息显示到Matlab App的textarea控件中,可以将M文件中的logline变量声明为全局变量,并在Matlab App中通过app.logline的方式访问和显示。在Matlab App的代码中,添加以下代码:

    % 在Matlab App中声明logline为全局变量
    global logline;
    
    % 将打印信息显示到textarea控件中
    app.appTextArea.Value = logline;
    

    然后,就可以在M文件中使用disp打印logline变量的值,打印信息会显示在Matlab App的textarea控件中。

    希望对你有所帮助!

    评论
  • 小明爱吃火锅 2023-09-20 04:43
    关注

    引用文心一言回答:
    如果你希望在MATLAB的App Designer中的textarea组件中显示disp函数的输出,你可以使用App Designer的组件属性和回调函数来实现。下面是一种可能的方法:

    首先,在你的MATLAB App Designer界面中,添加一个textarea组件,你可以通过拖拽的方式添加。

    然后,你需要创建一个函数,用于更新textarea的内容。这个函数可能类似于以下代码:

    function updateTextArea(app, str)  
        app.TextArea.Value = [app.TextArea.Value str];  
    end
    
    

    这个函数将接收一个字符串参数str,然后将其添加到TextArea的Value属性中。这样,每次调用这个函数时,它都会在textarea中追加新的文本。

    接下来,你需要在你的M文件中调用这个函数,而不是使用disp。你可能需要将你的代码从这样:

    disp('Hello, world!');
    
    
    

    改为

    updateTextArea(app, 'Hello, world!\n');
    
    

    这样,你的M文件中的所有disp调用都会被重定向到你的App Designer的textarea中。

    注意,这只是一个基本的解决方案,可能需要根据你的具体需求进行修改。例如,你可能需要处理多行输出,或者在textarea中显示不同的颜色或格式。这可能需要更复杂的代码和更多的App Designer功能。

    评论
  • Leodong. 2023-09-20 05:50
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    1、 若要将m文件中的打印参数logline传递到matlab app,可以按照以下步骤进行改进:
    在m文件中,将打印命令修改为:

    if isempty(strfind(linei, '%'))
        disp(num2str(linei));
    else
        logline = str2func(['disp', num2str(linei)]);
    end
    

    这样,当遇到以"%"开头的行时,会将该行的内容传递给logline函数。

    在matlab app中,将调用命令修改为:

    StrArrayNew = app.logline;
    logRefresh(app, StrArrayNew);
    

    这样,app就可以正确识别并调用logline函数了。

    2、 除了上述方法外,还可以使用以下方法实现m文件参数打印到matlab app.textarea中:
    在m文件中,将打印命令修改为:

    if isempty(strfind(linei, '%'))
        disp(num2str(linei));
    else
        logline = ['disp(', num2str(linei), ')'];
    end
    

    这样,当遇到以"%"开头的行时,会将该行的内容存储在logline字符串中。

    在matlab app中,将调用命令修改为:

    StrArrayNew = app.logline;
    logRefresh(app, StrArrayNew);
    

    这样,app就可以正确识别并调用logline字符串中的函数,从而实现将m文件中的参数打印到matlab app.textarea中。


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

    评论 编辑记录
    Leodong. 2023-09-20 05:51

    要将 MATLAB M 文件中的打印输出显示在 MATLAB App 的 TextArea 中,你可以使用 MATLAB App 的句柄来访问 TextArea 组件,并将打印输出追加到 TextArea 的文本中。下面是一种可能的解决方案:
    1、 在 MATLAB App 的代码部分,确保 TextArea 组件的句柄被正确定义。假设 TextArea 组件的句柄是 app.TextArea
    2、 在 M 文件中,将 disp 函数的输出存储在一个字符串变量中,而不是使用 logline 全局变量。例如,将 disp(num2str(linei)) 改为 logline = num2str(linei)
    3、 在 M 文件中,使用 fprintf 函数将 logline 的值追加到 TextArea 组件中。示例代码如下:

    logline = num2str(linei);
    fprintf(app.TextArea, '%s\n', logline);
    

    通过调用 fprintf 函数,你可以将字符串 logline 的值追加到 TextArea 组件中,并在每个打印输出后换行。
    这样,当 M 文件中的打印命令被执行时,打印输出将被追加到 MATLAB App 的 TextArea 中。
    另外,如果你想将 M 文件中的其他变量或数据传递给 MATLAB App 并显示在 TextArea 中,可以通过在 MATLAB App 中定义公共属性或方法,并使用 App 的句柄来访问和更新这些属性或方法。
    希望这些信息对你有所帮助!如果你有任何其他问题,请随时提问。

    回复
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-20 06:24
    关注

    【以下回答由 GPT 生成】

    问题1:如果按照此方法,如何改进才能将打印结果输出到Matlab App的Textarea中?

    首先,需要在Matlab App中添加一个Textarea控件,该控件用于显示打印结果。假设我们在Matlab App中有一个名为app的对象,并且已经在app Designer中添加了一个名为textarea的Textarea控件。

    对于问题中提到的报错,它是因为在Matlab App中没有正确地将M文件中定义的logline参数传递给Matlab App。要解决此问题,可以进行以下改进:

    1. 在Matlab App的启动函数中,添加以下代码,用于创建一个全局的logline变量,并将其初始化为空字符串: matlab global logline; logline = '';

    2. 修改M文件的打印函数,在打印内容前将其追加到logline变量中。在M文件中,将以下代码添加到需要打印的地方: matlab global logline; logline = [logline, '打印的内容'];

    3. 在Matlab App中的相关位置,使用logline变量的值来更新Textarea控件的内容。可以通过以下代码实现: matlab app.textarea.Value = logline;

    这样,当M文件中的打印函数被调用时,打印的内容将被追加到logline变量中,并且Textarea控件的内容将会实时更新,显示打印结果。

    问题2:还有其他方法可以实现M文件参数的打印到Matlab App的Textarea中吗?

    是的,还有其他方法可以实现M文件参数的打印到Matlab App的Textarea中。以下是一种可能的方法:

    1. 在Matlab App中的启动函数中,创建一个全局的log对象。该对象可以用来记录M文件中的打印结果。可以通过以下代码实现: matlab global log; log = '';

    2. 修改M文件中的打印函数,将打印结果追加到log对象中。在M文件中的需要打印的地方,添加以下代码: matlab global log; log = [log, '打印的内容'];

    3. 在Matlab App中的相关位置,使用log对象的值来更新Textarea控件的内容。可以通过以下代码实现: matlab app.textarea.Value = log;

    这种方法的思路与第一个方法类似,只是用一个名称为log的对象来代替了全局的logline变量。通过将打印结果存储在log对象中,然后将其值赋给Textarea控件,可以实现M文件参数的打印结果输出到Matlab App的Textarea中。


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

    在 MATLAB App Designer 的左侧窗格中,确保在 "Code View" 下创建了一个 logline 属性。你可以在左侧窗格中选择 "App Data",然后点击 "Add Property" 来创建一个 logline 属性。

    确保 logline 属性是公共的(Public)。你可以在 "Properties" 部分的属性设置中设置 Access 为 "Public"。

    在 MATLAB M 文件中,确保你正确地获取到了 MATLAB App Designer 对象的句柄,并将数据传递给 logline 属性。例如:

    % 获取 MATLAB App Designer 对象的句柄
    appDesignerObj = app.YourAppDesignerClassName;  % 请将 YourAppDesignerClassName 替换为你的类名
    
    % 设置 logline 属性
    appDesignerObj.logline = '要显示的文本内容';
    
    % 调用更新函数
    appDesignerObj.updateTextArea();
    
    
    

    请确保 YourAppDesignerClassName 替换为你实际的 MATLAB App Designer 类名,并且确保你的 App Designer 对象的句柄正确地与 MATLAB M 文件关联。

    评论
  • 呈两面包夹芝士 2023-09-22 12:20
    关注

    fid = fopen('filename.m', 'r');
    app.textarea = fscanf(fid, '%c');
    fclose(fid);

    评论
  • CrMylive. Python领域新星创作者 2023-09-22 17:05
    关注

    结合GPT给出回答如下请题主参考
    您可以使用MATLAB App Designer中的TextArea组件来显示m文件中的输出。下面是一个简单的示例:

    假设您在m文件中有以下代码:

    disp("Hello, world!");
    

    要将此消息显示在MATLAB App Designer中的TextArea中,请执行以下操作:

    1. 在App Designer中添加TextArea组件,命名为"appTextArea"。
    2. 在您的MATLAB App Designer的回调函数中,使用以下代码来捕获并显示disp输出:
    % 读取m文件的输出
    output = evalc("run('your_file_name.m')");
    
    % 将输出显示在appTextArea中
    app.appTextArea.Value = output;
    

    确保将"your_file_name.m"替换为您的m文件名称。将上述代码添加到适当的回调函数中,例如按钮的回调函数,以在单击按钮时显示输出。

    这种方法的一个缺点是,它不会在m文件执行时实时显示输出。相反,它会等待m文件执行完成后一次性显示所有输出。如果您需要实时显示输出,请参考MATLAB App Designer文档中关于在程序中捕获stdout和stderr的部分。

    评论
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日
  • 创建了问题 9月20日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部