Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何手动将MatlabGuide GUI代码转换为Octave UI组件_Matlab_User Interface_Octave - Fatal编程技术网

如何手动将MatlabGuide GUI代码转换为Octave UI组件

如何手动将MatlabGuide GUI代码转换为Octave UI组件,matlab,user-interface,octave,Matlab,User Interface,Octave,我应该如何转换(手动)由MatlabGuide GUI创建的代码,以使用Octave的UI组件 像这样的东西: gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Mat_to_Octave_OpeningFcn, ...

我应该如何转换(手动)由MatlabGuide GUI创建的代码,以使用Octave的UI组件

像这样的东西:

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
               'gui_Singleton',  gui_Singleton, ...
               'gui_OpeningFcn', @Mat_to_Octave_OpeningFcn, ...
               'gui_OutputFcn',  @Mat_to_Octave_OutputFcn, ...
               'gui_LayoutFcn',  [] , ...
               'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
等等等等

  • 在哪里可以找到需要替换的元素的综合列表

  • 如何为创建等效的GUIDE回调函数,以及如何为所有元素创建一个回调函数?也许这两者之间有区别

  • GUID GUI代码是开放的还是开源的?它

  • 用户在指南中设置的UI布局是否可访问?i、 我们知道按钮的宽度和文本颜色设置保存在哪里吗

  • 有没有一个全面的清单?如果是,在哪里?UI组件中是否提供了指南中的所有或至少大部分元素?我怎么检查这个

  • 在开始这项任务之前,我有没有遗漏什么


  • 在大多数情况下,在倍频程上创建GUI与matlab完全相同。GUI创建是对octave的一个相对较新的添加,因此预计matlab家族中最近的几个添加尚未将其添加到octave中,但在大多数情况下,实现GUI应用程序的matlab代码应该可以在octave上工作,而无需或几乎不需要调整。以下是和的相应手动条目;您会注意到核心功能是相同的

    一个重要的“陷阱”是octave暂时不支持嵌套函数的句柄(以后可能会更改)。例如,考虑下面的MATLAB代码实现一个简单的GUI,其中一个滑块影响情节(取自)。p> 如果您尝试在倍频程上运行此命令,将收到以下错误消息:

    >>myplot
    错误:尚未支持嵌套函数的句柄
    错误:从调用 第10行第11列的myplot

    将嵌套函数转换为独立函数或子函数可以解决此问题(如中所示)

    至于GUIDE,虽然octave还没有类似的用于创建GUI应用程序的“用户友好”图形工具,但归根结底,GUIDE所做的只是为UI元素创建生成适当的底层代码,理论上应该与octave兼容。话虽如此,值得仔细阅读一下files GUIDE创建的内容,即加载figure元素的“.fig”文件和包含回调和实际代码的“functions”文件等。因此,在倍频程中“运行”指南生成的文件可能需要先“加载”figure。此外,在实践中,GUIDE可能会使用嵌套函数进行回调,因此代码可能需要进行一些调整,才能将这些函数转换为合适的子函数,从而使其在倍频程上工作

    话虽如此,GUIDE确实更适合那些喜欢避免使用“实际”代码的人,但事实上,一旦您熟悉了
    get
    /
    set
    命令如何操作ui元素属性,那么直接在matlab/octave中编写GUI可能要简单得多。如果您正在寻找适用于octave和matlab的GUI解决方案,我当然会建议您沿着这条路线走下去,坚持使用子函数而不是嵌套函数

    回答上述内容未涉及的其余两个问题:

    • 不,指南不是开源的(更不用说自由软件了)。这是Mathworks使用其许可证的专有代码。特别是,在理论上,使用指南生成的八度代码可能会有许可问题,但我不确定

    • GUIDE直接生成一个.fig文件。这是一个二进制文件,可以加载到matlab(理论上是倍频程)。使用指南,没有其他“源”文件详细说明用于创建此图形的uielements及其属性。如上所述,在matlab中,一旦加载图形,您可以从图形的图形菜单导出“源代码”,如果需要,可以重新创建此图形。但是,这可能不是最人性化的代码。这是喜欢编程方法而不是指南的原因之一:您有干净、清晰的源代码,它以编程方式详细说明uielements的属性,而不必通过加载图形并搜索其属性来查找它们


    不确定从何处开始。在matlab中创建UI元素的语法应与octave相同。指南是matlab用来帮助新手用户的图形“工具”,但除此之外,它所要做的就是生成相关代码,这些代码在八度音程中大部分应该是相同的。它肯定不是“开源”,更不用说copyleft了;我认为你提供的链接与此无关。我不确定上面的代码应该做什么。各种属性(例如宽度、颜色)是生成对象的一部分,可以使用标准的get/set函数进行查询。谢谢。所以GUIDE实际上创建了使用“UI元素”的代码,这些元素对于Octave是一样的吗?我不这么认为。Octave UI元素是在开发后期添加的,当前(2017)Octave版本无法识别GUIDE创建的页面。也许我错了。我从Matlab到Octave移植项目的经验有限。我不再能够访问Matlab来测试这一点,但一般来说,Matlab和Octave GUI代码应该基本兼容。一个小问题是Octave对目前定义为嵌套函数的回调函数有点不满意;我相信大多数Matlab代码都以这种方式使用嵌套函数,所以这可能就是您遇到的错误。有关两种语言的简单GUI示例,请参见和,特别是第二个问题中Andy的示例。这些也解决了回调函数的使用问题。因此@tasospapstyllanou请将其作为答案发布,我会接受。您完全回答了我的问题,不过作为记录:我们有数百个
    %%%%%% In file myplot.m %%%%%
    function myplot
    
      %% Create initial figure and spiral plot
      figure;  axes ('position', [0.1, 0.3, 0.8, 0.6]);
      t = linspace (0, 8*pi, 100);  x = t .* cos(t);  y = t .* sin(t);
      plot (x, y);  axis ([-100, 100, -100, 100]);
    
      %% Add ui 'slider' element      
      hslider = uicontrol (                    ...
             'style', 'slider',                ...
             'Units', 'normalized',            ...
             'position', [0.1, 0.1, 0.8, 0.1], ...
             'min', 1,                         ...
             'max', 50,                        ...
             'value', 10,                      ...
             'callback', {@plotstuff}          ...
           );
    
      %% Callback function called by slider event
      function plotstuff (h, event)
        n = get (h, 'value');
        x = n * t .* cos(t);  y = n * t .* sin(t);
        plot (x, y);  axis ([-100, 100, -100, 100]);
      end
    end