1

App Designer不支持 saveas、savefig 或 print,但有没有办法使用它来启动一个支持的 MATLAB 程序?

我正在使用一个包含数千行代码的 MATLAB 程序,而不是我的全部。该程序保存图形供以后参考,有些是 .fig 格式,有些是 PDF。它运行良好,但每次运行都有许多选项可供选择,目前通过编辑主脚本顶部的值来完成。我想添加一个 GUI 来简化它。

我知道还有其他方法,但 App Designer 似乎是“现代”的东西。我可以将它用作现有脚本的启动器吗?如果我只是如下所示调用它,App Designer 的图形限制适用于整个脚本,它会执行所有计算,但在第一次“打印”时失败。我希望有另一种方法。

    % Callback function
    function GoButton_2Pushed(app, event)
        % Save values for GUI restart.
        setKeySaveState(app);            
        % Use a struct to pass values to the model.
        scriptVars = app.modelVars;
        % Run
        The_Name_of_My_Script
    end

我可以让 GUI 将结构写入 json 格式的文件,手动启动主脚本,然后让它读取文件。但这似乎很愚蠢。

编辑:这是来自 MATLAB 命令窗口的错误消息:

使用打印时出错(第 79 行) 使用 uifigure 函数创建的图形不支持该功能。有关详细信息,请参阅 App 设计器中的图形支持。

MapsCoralCoverClean>oneMap (line 298) print('-dpdf', '-r200', outFile);

MapsCoralCoverClean 中的错误(第 70 行) oneMap(13, activeLatLon(:, 1), activeLatLon(:, 2), events85_2010(activeReefs), [], jet, tName, outFile, false);

A_Coral_Model_170118 中的错误(第 780 行) MapsCoralCoverClean(fullMapDir, Reefs_latlon, toDo, lastYearAlive, ...

ModelGUI_2017a/GoButton_2Pushed 中的错误(第 465 行)A_Coral_Model_170118 使用 matlab.ui.control.internal.controller.ComponentController/executeUserCallback 时出错(第 310 行)评估按钮 PrivateButtonPushedFcn 时出错。

4

1 回答 1

1

我发现最好的做法是始终明确地提供图形对象的句柄,因为依赖 MATLAB 的当前图形当前轴通常不一致并且可能导致问题。

除非明确提供,否则print将根据传递的其他参数保存当前图形。在这种情况下,您的uifigure窗口在执行其他处理功能期间保持当前图形,导致print出错,因为它尚未针对某些新图形对象实现(为什么,MathWorks,为什么!?)。要解决此问题,请将处理函数figure调用的输出作为第一个输入传递给print.

于 2017-10-22T11:23:12.100 回答