【发布时间】:2017-11-07 16:10:28
【问题描述】:
最先进的
Octave 允许创建用户界面。虽然 matlab 提供了GUIDE 一个用于图形设计和编辑用户界面的复杂工具,但 octave 没有这样的工具。相反,您必须通过在 ui 窗口坐标系中指定数字坐标来手动放置 ui 元素。
另一方面,在 qt 甚至 x-windows 和 android 中也有许多用于用户界面的布局引擎或在 html 的 Web 浏览器中。所以这个问题已经解决了很多次了。
请求的解决方案
我正在寻找一种解决方案,它允许用户界面组件的通用放置,例如在表格或网格布局中。
我想象使用像 html 表格这样的布局引擎。您定义一个表格,在其中每个单元格放置一个 ui 元素。为了获得一定的灵活性,您可以创建跨多列或多行的组合单元格。
每个单元格应自动调整大小以至少适合内部元素并均匀分布元素。布局选项允许在单元格内定位 ui 元素。
当然应该可以通过在表格单元格中放置一个新表格来创建嵌套结构。
伪代码
这里有一些伪代码来定义 ui 的样子。
ui = cell(2,2);
addUIElement(ui, 1,1, uicontrol("style", "text", "string", "This is text"));
addUIElement(ui, 1,2, uicontrol("style", "text", "string", "This is another text"));
addUIElement(ui, 2,1, uicontrol ("style", "pushbutton", "string", "Push me");
addUIElement(ui, 2,2, uicontrol ("style", "pushbutton", "string", "Push me too");
% Create and draw the user interface
gui = CreatGui(ui);
注意事项
- 面向对象的实现可能比功能接口更合适
-
addUIElement函数的其他选项可以控制单元格中的位置和其他布局选项。
问题
对于使用现有代码在 octave 中实现有什么建议吗?
【问题讨论】:
-
坐标可以“标准化”(即百分比单位)。您可以简单地将所需网格的坐标定义为元胞数组,然后将它们直接插入您的
uicontrol函数的position参数中。确实不需要更精细的“网格化”界面。 -
这读起来(有许多要求)就像学校/大学的作业。如果您考虑 Tasos 的评论,那么实现这一点应该不难。考虑将其推送到 github/bitbucket/wahtever 并在完成后在此处添加链接
-
@Tasos:只要你不打算改变你的设计,标准化的单位就很好。用户界面的设计更改可能由设计人员决定,或者——更有趣的是——在通用用户界面中发生。示例:为多个选项制作一组按钮以适应可用选项。无论如何,您必须更正设计中的所有坐标。这可以通过布局引擎自动化。也许我必须在问题中更详细地解释这一点。
-
@Andy:谢谢你的提示。也许我的问题对于这个平台来说有点太“大”了。事实上,这可能是一个不错的大学项目。但我知道这种类型的布局引擎有可用的解决方案,例如在 X-Windows 或 qt 中。我希望在这里找到一个八度适应性解决方案的提示。我应该将此添加到问题中。