18

我一直在尝试在 MATLAB 中组合一个 gui,并且遇到了很大的困难。下面是关于我的程序的一些背景知识:我想创建一个向导来引导用户完成图像分析过程。该向导将提示用户输入,然后在按下标有“下一步”的按钮后执行图像处理操作,依此类推。通过阅读 MATLAB 帮助,我相信有两种创建 gui 的方法: 1. 用几行代码编写一个 gui。2. 使用指南。

我认为 GUIDE 的学习曲线最浅。起初,这个过程是直截了当的。我可以拖放按钮和文本框并轻松排列它们。我的计划是安排一系列面板,包括按钮和文本等,当按下“下一步”按钮时,这些面板将依次变得可见。正是在这里,我被难住了。

使用 GUIDE 保存面板后,MATLAB 会创建一个 .m 文件和一个 .fig 文件。通读 .m 文件,我发现它为我留下了为回调编写代码的空间,但没有别的了。.fig 文件是二进制文件,因此我不敢编辑它。我想知道如何控制对象,例如如何设置面板的可见性?此外,我必须分别创建向导的每个面板。我希望我可以手动将 .m 文件合并到一个wizard.m 包装文件中,但我认为这不是正确的方法(至少对我来说,因为我看不到该怎么做)。

代替使用 GUIDE,我看到了使用“uicontrol”函数创建 gui 的示例。这种方法对我来说似乎很乏味,因为我必须手动编码每个按钮的位置、大小和默认值。也许这是最好的方法,但它吓到了我。

结果,我对 MATLAB 的笨拙 gui 工具感到不满,我对自己缺乏克服这一障碍的能力感到不满。

我已经看到了一些在 MATLAB 中创建的精美 gui,并且我自己也尝试过,但我对它们的存在感到困惑。制作它们的人要么是出色的 MATLAB 用户(我不是),要么我遗漏了一些明显的东西,可以使用一些帮助查看。我现在质疑 gui 是否值得努力。我认为自己不会探索像 QT 这样的东西,因为将 MATLAB 代码嵌入到其他语言(如 python)中会带来额外的挑战。

有人对这个问题有建议吗?谁能指出我哪里出错了或者为什么我遇到了这样的困难?

4

6 回答 6

20

.fig 文件是二进制文件,因此我不敢编辑它。

FIG 文件是一个 MAT 文件,其中包含您在 GUIDE 中设置的属性的 gui 元素列表。

如何设置面板的可见性?

为元素分配标签,您可以使用handles.mytaglike访问它set(handles.mypanel, 'visible', 'off')

此外,我必须分别创建向导的每个面板。我希望我可以手动将 .m 文件合并到一个wizard.m 包装文件中,但我认为这不是正确的方法(至少对我来说,因为我看不到该怎么做)。

您不能将这些自动生成的 m 文件合并为一个,为什么还要这样做?为每个向导页面保留一个 .fig 和 .m 文件!

代替使用 GUIDE,我看到了使用“uicontrol”函数创建 gui 的示例。这种方法对我来说似乎很乏味,因为我必须手动编码每个按钮的位置、大小和默认值。也许这是最好的方法,但它吓到了我。

uicontrol如果您不手动定位元素而是使用布局管理器,则直接使用也不错。你可以在这里这里看到一些。如果您希望您的 GUI 可以很好地调整大小,那么布局管理器是唯一的方法。

有人对这个问题有建议吗?谁能指出我哪里出错了或者为什么我遇到了这样的困难?

专业的 GUI 编程并不容易,IMO 甚至是最困难的部分。

除了 MATLAB GUI,我还经常使用 Java Swing 和 .NET WPF,IMO MATLAB GUI 要容易得多,你可以用 10%(学习)的努力完成 90% 当然,你仍然需要时间来习惯它。

结果,我对 MATLAB 的笨拙 gui 工具感到不满,我对自己缺乏克服这一障碍的能力感到不满。

是的,GUIDE 不是最佳解决方案,但可能是快速创建 GUI 的最佳技术。

我已经看到了一些在 MATLAB 中创建的精美 gui,并且我自己也尝试过,但我对它们的存在感到困惑。

这些 GUI 是利用 MATLAB GUI 特定细节的黑客攻击,例如视觉分隔符是白色 uicontrol 上的长“__________”黑色文本,白色 uicontrol 仅两个像素高或使用 html 工具提示中的不同颜色。

毕竟你可以在 MATLAB GUI 中使用 Java Swing(因为它实际上是从 Swing 派生的)

我现在质疑 gui 是否值得努力。

是的,在你的情况下保持它非常简单,只是功能,不要考虑花哨的东西!

于 2011-10-09T06:43:50.677 回答
6

截至 2015 年 6 月,GUIDE 比您想象的还要糟糕。配置 GUI 效率非常低,它是地狱般的错误。绝对不是专业级的。向导,我怎么看不起你?让我列举一下方法:

1) 创建 GUI 时的输入错误不会被标记。潜伏着这个未通知的错误,你可以工作几个小时。当您点击“保存”时,GUIDE 将不会保存您的工作。因此,GUIDE 违反了任何软件包的主要指令:您不得丢失用户的工作或数据。我不敢相信 Mathworks 真的发布了这么糟糕的东西。

2)帮派复制是不确定的。假设您有一个计算早餐效果的程序。您有小时、分钟、碳水化合物的数量作为可编辑框。您将标签作为静态文本。你想吃同样的午餐和晚餐。全选。Ctrl-C。将光标指向其他地方,然后按 Ctrl-V。没发生什么事。不,等一下,大约 30 秒后,粘贴出现。但是,如果您已经在做其他事情,那么...尝试弄清楚到底发生了什么。

3)即使是帮派行动也是不确定的/奇怪的/超自然的/附身的。假设你想在午餐时上下移动那一排?强调。使用箭头键移动它。成功!可是等等!大约五秒钟后,文本和编辑框开始移回原来的位置!无需干预!它被附身了!

我使用 GUIDE 创建了一个相当复杂的 GUI。比应该 - 或可能 - 更多的心痛和麻烦。鉴于运行 JAVA/Python/Julia 的免费软件替代品,我不会启动另一个需要 GUI 的 MATLAB 项目。保存你的面团!

于 2015-06-06T19:54:50.860 回答
4

就个人而言,我发现 GUIDE 足以用于快速简单的 GUI 并学习如何创建 GUI,但现在我通常更喜欢以编程方式创建 GUI。这允许更好地控制内容。对我来说,关键是使用 UI 元素的 UserData 属性来存储任何有用的数据,包括您要更新的 UI 对象的句柄。

但是,如果您想要一些聪明的东西,那么您将不得不求助于基于 Java 或 .NET 的东西。

此外,重要的是要记住 MATLAB 最擅长什么,而 GUI 并不是强项。如果您使用 GUI 创建更好的编程语言,那么您将不得不在其他方面做出妥协,例如使用数组和矩阵数据的易用性。

编辑:@Mikhail 链接到的GUI 布局工具箱看起来非常有用。

于 2011-10-09T16:57:51.773 回答
3

我一直在 MATLAB 中编写 guis。

据我所知,GUIDE 使编程 gui 变得非常方便。正如您所说,您实际上不必费心编写任何按钮等,它只是排列按钮并填充 m 文件。在按钮中,您可以通过将属性“Visible”设置为“on”或“off”来处理可见性。

我尝试了两种方法:手动编写 gui 并使用 GUIDE 编写它。我的印象是你真的只需要进入它。一旦你掌握了句柄的概念(这是 matlab guis 的主要内容),你就明白了。

尝试先编写一个简单的 gui,不要从你的项目开始。了解句柄和检查器在 MATLAB 中的工作方式以及如何设置值的属性。找出可以在 GUI 中存储数据的位置以及如何在其他窗口中检索数据(在窗口之间传递句柄)。

我想大概就是这样!在 MATLAB 中编程 gui 可能很难开始,但是一旦你弄清楚了我上面提到的事情,它就非常简单了。

于 2011-10-09T01:57:49.377 回答
3

与以编程方式创建的 GUIDE 相比,GUIDE 生成的 GUI 的主要问题是文件不是 text。因此,您不能使用版本控制。有一种解决方法 - 您可以使用该export功能仅创建.m文件。当然,您将无法将其切换回fig并进行可视化编辑。
就个人而言,我总是更喜欢在没有 GUIDE 的情况下编写 GUI。

于 2012-01-29T23:36:19.243 回答
0

我来晚了这次谈话,但想加我的 0.02 美元。正如你提到的 GUI 设计不是 MatLab 的强项。但是,可以用它做很多事情。如果您有任何具体问题,我很乐意回答。此外,要意识到它是基于 java swing 库构建的,因此您可以实际利用这些功能。但是,这些功能没有记录在案。有一本书名为 Undocumented Secrets of MatLab,对底层的挥杆组件进行了相当不错的讨论。

MatLab GUI 有一些怪癖,但如果你能克服这些,那么你会喜欢它。此外,如前所述,更困难的障碍之一是手柄的概念。一旦你掌握了这个概念,你就会成功的 90%。

于 2014-05-21T00:22:23.317 回答