MATLAB App Designer应用程序可以启动一个可以保存数字的脚本吗?

时间:2017-10-18 18:31:18

标签: matlab matlab-app-designer

App Designer doesn't support saveas, savefig, or 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 Designer中支持。

     

MapsCoralCoverClean中的错误> oneMap(第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行)评估Button PrivateButtonPushedFcn时出错。

1 个答案:

答案 0 :(得分:1)

我发现最好总是明确地为图形对象提供句柄,因为依赖于MATLAB的current figurecurrent axes经常不一致并且可能导致问题。

除非明确提供,否则print将根据传递的其他参数保存当前数字。在这种情况下,您的print窗口在执行其他处理功能期间仍然是当前数字,导致print错误输出,因为它尚未针对某些新图形对象实现(为什么,MathWorks ,为什么!?)。要解决此问题,请将处理函数“figure”调用的输出作为import UIKit class RoundedButton: UIButton { override init(frame: CGRect) { super.init(frame: frame) self.layer.cornerRadius = self.bounds.width * 0.5 self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!) self.setTitleColor(UIColor.white, for: UIControlState.normal) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.layer.cornerRadius = self.bounds.width * 0.5 self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!) self.setTitleColor(UIColor.white, for: UIControlState.normal) } } 的第一个输入传递。