如何手动将Matlab GUIDE GUI代码转换为Octave UI组件
How to manually convert Matlab GUIDE GUI code to Octave UI Components
我应该如何将 Matlab GUIDE 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
等等等
在哪里可以找到我需要替换的元素的完整列表?
如何为 Octave UI elements 创建与 GUIDE 回调函数等效的函数,我能否为所有元素创建一个回调函数?也许两者之间存在差异。
GUID GUI代码是开源的,还是开源的?它surely seems so here。
用户在GUIDE中设置的UI布局是否可以访问?即我们知道按钮的宽度和文本颜色设置保存在哪里吗?
哪里有完整的列表?如果有,在哪里? GUIDE 中的全部或至少大部分元素是否在 UI 组件中可用?我怎样才能检查这个?
在开始任务之前我有什么遗漏的吗?
在大多数情况下,在 Octave 上创建 GUI 与 matlab 相同。 GUI-creation 是对八度音阶的一个相对较新的添加,因此预计 matlab 系列中最近添加的几个还没有进入八度音阶,但在大多数情况下,matlab 代码实现了 GUI 应用程序应该在八度音阶上工作,不需要或很少需要调整。以下是 matlab and octave 的相应手动条目;您会注意到核心功能是相同的。
一个重要的'catch'是octave暂时不支持嵌套函数的句柄(稍后可能会改变)。例如,考虑以下实现简单 GUI 的 matlab 代码,其中带有影响绘图的滑块(取自 this answer)。
%%%%%% 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
如果你在八度上尝试 运行 这个,你会收到以下错误信息:
>> myplot
error: handles to nested functions are not yet supported
error: called from
myplot at line 10 column 11
将嵌套函数转换为独立函数或子函数可以解决此问题(如 中所示)。
至于 GUIDE,虽然 Octave 还没有类似的 "user-friendly" 用于 GUI-app 创建的图形工具,但归根结底,所有 G UIDE 所做的是为 UI-元素创建生成适当的基础代码,理论上应该与八度兼容。话虽如此,值得仔细阅读 GUIDE 创建的文件,即加载图形元素的“.fig”文件,以及包含回调和实际代码的 'functions' 文件等。所以, "running"一个GUIDE生成的八度文件大概会先涉及到'loading'这个数字。此外,在实践中,GUIDE 可能会使用嵌套函数进行回调,因此代码可能需要进行一些调整才能将它们转换为 suitable 子函数以使其在八度音阶上工作。
话虽如此,GUIDE确实更适合喜欢避免'actual'代码的人,但实际上,直接在matlab / octave中编码GUI是一旦您熟悉了 get
/ set
命令如何处理 ui 元素属性,可能会更直接。如果您正在寻找适用于 Octave 和 Matlab 的 GUI 解决方案,我当然会建议您沿着这条路走下去,并坚持使用子函数而不是嵌套函数。
回答上面没有涉及的其余两个问题:
不,GUIDE 不是开源的(更不用说自由软件了)。它是 Mathworks 的专有代码,使用了他们的许可证。特别是,理论上,使用 GUIDE 生成的八度代码可能存在许可问题,但我不确定。
GUIDE直接生成.fig文件。这是一个二进制文件,可以加载到 matlab(理论上是 Octave)上。对于 GUIDE,没有其他 'source' 文件详细说明用于创建此图形的 ui 元素及其属性。话虽如此,在 matlab 中,加载图形后,您可以从图形的图形菜单中导出 'source code',如果需要,可以重新创建该图形。但是,这可能不是最人性化的代码。这是比 GUIDE 更喜欢编程方法的原因之一:你有干净、清晰的源代码,它以编程方式详细说明了 ui 元素的属性,而不是必须通过加载图形并搜索其属性。
我应该如何将 Matlab GUIDE 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
等等等
在哪里可以找到我需要替换的元素的完整列表?
如何为 Octave UI elements 创建与 GUIDE 回调函数等效的函数,我能否为所有元素创建一个回调函数?也许两者之间存在差异。
GUID GUI代码是开源的,还是开源的?它surely seems so here。
用户在GUIDE中设置的UI布局是否可以访问?即我们知道按钮的宽度和文本颜色设置保存在哪里吗?
哪里有完整的列表?如果有,在哪里? GUIDE 中的全部或至少大部分元素是否在 UI 组件中可用?我怎样才能检查这个?
在开始任务之前我有什么遗漏的吗?
在大多数情况下,在 Octave 上创建 GUI 与 matlab 相同。 GUI-creation 是对八度音阶的一个相对较新的添加,因此预计 matlab 系列中最近添加的几个还没有进入八度音阶,但在大多数情况下,matlab 代码实现了 GUI 应用程序应该在八度音阶上工作,不需要或很少需要调整。以下是 matlab and octave 的相应手动条目;您会注意到核心功能是相同的。
一个重要的'catch'是octave暂时不支持嵌套函数的句柄(稍后可能会改变)。例如,考虑以下实现简单 GUI 的 matlab 代码,其中带有影响绘图的滑块(取自 this answer)。
%%%%%% 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
如果你在八度上尝试 运行 这个,你会收到以下错误信息:
>> myplot
error: handles to nested functions are not yet supported
error: called from myplot at line 10 column 11
将嵌套函数转换为独立函数或子函数可以解决此问题(如
至于 GUIDE,虽然 Octave 还没有类似的 "user-friendly" 用于 GUI-app 创建的图形工具,但归根结底,所有 G UIDE 所做的是为 UI-元素创建生成适当的基础代码,理论上应该与八度兼容。话虽如此,值得仔细阅读 GUIDE 创建的文件,即加载图形元素的“.fig”文件,以及包含回调和实际代码的 'functions' 文件等。所以, "running"一个GUIDE生成的八度文件大概会先涉及到'loading'这个数字。此外,在实践中,GUIDE 可能会使用嵌套函数进行回调,因此代码可能需要进行一些调整才能将它们转换为 suitable 子函数以使其在八度音阶上工作。
话虽如此,GUIDE确实更适合喜欢避免'actual'代码的人,但实际上,直接在matlab / octave中编码GUI是一旦您熟悉了 get
/ set
命令如何处理 ui 元素属性,可能会更直接。如果您正在寻找适用于 Octave 和 Matlab 的 GUI 解决方案,我当然会建议您沿着这条路走下去,并坚持使用子函数而不是嵌套函数。
回答上面没有涉及的其余两个问题:
不,GUIDE 不是开源的(更不用说自由软件了)。它是 Mathworks 的专有代码,使用了他们的许可证。特别是,理论上,使用 GUIDE 生成的八度代码可能存在许可问题,但我不确定。
GUIDE直接生成.fig文件。这是一个二进制文件,可以加载到 matlab(理论上是 Octave)上。对于 GUIDE,没有其他 'source' 文件详细说明用于创建此图形的 ui 元素及其属性。话虽如此,在 matlab 中,加载图形后,您可以从图形的图形菜单中导出 'source code',如果需要,可以重新创建该图形。但是,这可能不是最人性化的代码。这是比 GUIDE 更喜欢编程方法的原因之一:你有干净、清晰的源代码,它以编程方式详细说明了 ui 元素的属性,而不是必须通过加载图形并搜索其属性。