图片缩略图

GUI布局工具箱

版本2.3.5 (870 KB)的 大卫·桑普森
布局管理器的MATLAB图形用户界面

713下载

更新2020年10月29日

查看版本历史

查看许可协议

编者按:受欢迎的文件20172018

该文件被选为MATLAB中央本周精选

这个工具箱提供了创建复杂的MATLAB图形用户界面的工具,这些界面可以优雅地调整大小。提供的类可以组合使用,生成几乎任何用户界面布局。

*将MATLAB用户界面组件水平、垂直或网格排列
*混合固定和可变尺寸的组件
*通过拖动分隔线交互调整组件的大小
*使用标签和面板显示和隐藏组件
*在可滚动面板中显示大组件的一部分

这个工具箱是由David Sampson和Ben Tordoff开发的,他们来自[咨询服务](//www.tianjin-qmedu.com/services/consulting/)小组在MathWorks。

此版本适用于MATLAB R2014b及更高版本。对于R2014a和更早版本,参见[版本1](//www.tianjin-qmedu.com/matlabcentral/fileexchange/27758-gui-layout-toolbox).

引用作为

大卫·桑普森(2021年)。GUI布局工具箱(//www.tianjin-qmedu.com/matlabcentral/fileexchange/47982-gui-layout-toolbox), MATLAB中央文件交换。检索

评论及评分(617

大卫·桑普森

Joana,这是一个工具箱,不是一个应用程序。参见Add-Ons >管理Add-Ons。

琼娜布里托

我安装了它,但无法访问工具箱。它不会显示在应用程序面板中。我用的是MATLAB R2020a

Gatwech释

@David,非常感谢工具箱的更新。就在后面。

hagege鲁本

大卫·桑普森

继续我今天早些时候的帖子,我最近发现了R2020b(和更早的版本)中uifigure标准化单位的一个错误,当Windows显示缩放不统一时。我正在与开发部门的同事一起评估是否可以通过MATLAB产品更新来解决这个问题。围绕这个问题编写代码是不可行的。

这种Cihan

大卫·桑普森

盖特威克,圣诞快乐!虽然在圣诞树下有一个新的MATLAB Minimart版本,但GUI布局工具箱还需要进一步的工作。不过我可以分享一下最近的进展。在2020年第四季度,我们重构了测试套件,以支持添加ufigigent -父容器。万博1manbetx我们还将我们的开发环境从SVN转移到Git(Lab),这本身就是一项重要的任务——特别是迁移问题和重建我们的多版本测试能力。现在我们已经有了一个很好的基础来验证ufige,并且在不破坏Java兼容性的情况下进行更改。我们分别开始了TabGroup的工作,但进展并没有预期的那么快。我们将在1月份继续讨论这个问题。最后但并非最不重要的是,我一直在研究如何删除对一个旧的、不支持的文档工具的内部依赖。万博1manbetx我希望我们将转向Live Scripts和/或Markdown作为文档创作环境。

这种Cihan

感谢您的修复和支持。万博1manbetx

Gatwech释

Gatwech释

非常感谢你,大卫。和Yannick一样,我每天都访问这个帖子,希望这个工具箱能有一个UIFigure的圣诞礼物。我希望你仍然计划在年底前发布它。伟大的工作!

大卫·桑普森

今天我们发布了一个新版本来修复uix的一个问题。面板和ui。BoxPanelin R2020b, plus some minor fixes to uix.ScrollingPanel.

从上一个版本开始,我们已经从纯Subversion转移到Git,使用GitLab进行开发。请让我们知道,如果您注意到任何问题与发布。

从uix中删除图像的工作仍在继续。TabPaneland assessing readiness for use with uifigure. Both are planned for this year.

大卫·桑普森

Yannick,我们目前正在更新我们的测试套件,以符合GUI布局工具箱在不同版本中的uifig图使用要求。交互式测试表明,在R2020b中有很多东西是有效的。注意这个空间。

亚尼克Ducret

谢谢你David,我们已经把我们所有的代码移到2020b了,因为我们在版本上早该向前迈进一步了,所以我的问题是你是否计划在2020b发布一个uifig图版本的工具箱,还是仍然在等待未来的Matlab更新

神灵omidi

完成,谢谢。

神灵omidi

你好,我怎么控制空网格区域的背景色,这是用'uix做的。空”?我想把两个徽标和一个小测试在空网格。我应该改变我的方法吗?
谢谢

大卫·桑普森

Yannick,我们采用的方法是确保相同的工具箱对figure或ufigfig都能正确工作。现在R2020b已经发布了,我们将再次审查什么是有效的,什么是无效的。最后已知的问题是uicontrol支持(目前处于实验阶段)和可拖动万博1manbetx分隔器的一些问题。最后,我想发布一个表,说明什么对不同版本有效,什么不有效,因为我知道这并不像使用最新版本那么简单。然而,在早期的版本中,我们将无法解决ufigfige的限制,因为那将相当于向后移植较深的产品代码块。

亚尼克Ducret

嗨,大卫,工具箱的uifig图版本计划有什么更新吗?GridLayout还远远不能取代GUILayout ?

再次感谢你的工具箱!

大卫·桑普森

维罗妮卡,我做了一些调查,怀疑你的评论与“EasyGUI”有关。//www.tianjin-qmedu.com/matlabcentral/fileexchange/22936-easygui

维罗妮卡人告诉

你好!当我试图运行“autodemo”,我得到了其他用户相同的错误:
"使用matlab.ui.container.Panel/set . panel错误
Panel类上没有宽度限制属性。”

马克Shein

songyao杨

它比任何书都好

大卫·桑普森

Albert,您的应用程序找不到GUI布局工具箱的错误是什么?

艾伯特Piersson

我使用的是matlab 2019a。我安装了GUI工具箱。在matlab的提示符中,当我输入ver时,它显示它已安装,但我需要打开的程序说,它没有安装。任何想法吗?

内森埃林森

伟大的工具箱!在:uix中发现一个小错误。分频器/ isMouseOver

我只在我的一些数字中得到这个错误,这个错误只是一个烦恼:
警告:在执行为类matlab.ui定义的事件WindowMousePress的侦听器回调时发生错误。
||和&&操作符的操作数必须转换为逻辑标量值。

ui错误。分频器/isMouseOver (line 261)
Tf (ii) = Tf (ii) && obj(ii)。控件== eventData.HitObject;

它是由eventData引起的。HitObject为空。不知道为什么会这样。

拉尔斯

@Laura:谢谢!我使用BetterSnapTool进行窗口管理,在Matlab中禁用它解决了这个问题。

劳拉·邓普西

嗨,Lars,感谢你报告你在macOS Mojave中使用MATLAB的经验。你所描述的听起来很像MATLAB答案上的这篇文章://www.tianjin-qmedu.com/matlabcentral/answers/422244-why-do-buttons-apps-or-the-editor-in-matlab-respond-slowly-or-hang-on-macos.该页面提供了一些推荐的解决方案。通常,这个问题似乎是由A11Y工具或macOS的窗口管理应用程序(如Magnet或BetterTouchTool)引起的。

正如David对TG所说,如果您需要进一步的帮助,MathWorks支万博1manbetx持团队随时准备提供帮助。//www.tianjin-qmedu.com/万博1manbetxsupport/contact_us.html

拉尔斯

神奇的工具箱!在windows上…我不能让它在Mac OS (10.14, Mojave)与Matlab 2019b正常工作。与图形的任何交互要么非常慢,要么导致Matlab在旋转的轮子上失去响应。

即使是简单的例子也显示了这种行为,而分析器并没有提供任何明确的提示(对我来说)。

H_f =图;
H_hbox = uix。HBox('parent', h_f);
uix。空(“父”,h_hbox);
H_c = uicontainer('parent', h_hbox);
H_axes = axes(h_c);
山峰;

我使用默认的Matlab Java,没有安装系统范围的JDK。

任何帮助都将非常感激!

大卫·桑普森

TG,请联系MathWorks支持,他们将帮助您诊断该问题万博1manbetx。

TG

我可以代码4.2:最小化和最大化。这正是我所需要的。GUI渲染,我能够折叠其中一个窗口,但然后我的MATLAB与光标旋转器冻结,直到我强制退出MATLAB。我在OSX上。我真的很失望,因为这正是我所需要的,但我不知道什么是错误如何如何让这在我的电脑上正常工作

迈克尔剑

你好,大卫,谢谢你这么棒的工具箱。然而,我有问题编译从这个工具箱创建的应用程序使用matlab编译器。当我尝试在应用程序编译器应用程序中添加“资源”目录时,它显示“下列MATLAB文件未添加,因为它们无法读取:\GUI布局工具箱2.3.4\ Layout \+uix\Resources”。我可以在这个目录中添加*.png文件,但编译后的应用程序无法运行,因为它找不到这些。png文件。你有什么建议吗?或者以前有人遇到过这个错误吗?先谢谢你了。

马克对于

你好David,你有R2014a配套的版本吗?在我的R2014a版本中使用这个工具箱有冲突。谢谢。

大卫·桑普森

这是罕见的五分之四的痛苦。标签头的形状在2009年相当流行。不过说真的,如果你不需要禁用标签的功能,请使用uitab和uitabgroup,这在创建GUI布局工具箱时是不可用的。

acdyf acdyf

OMG,为什么把标签做成这样奇怪的形状????>_

CHIFU日元

yUYLONG年代

这是一个很好的工具

大卫·桑普森

Andrew,我将tbx\layoutdoc添加到路径中,然后准备了工具箱附带的helptoc.xml和info.xml。在本例中,helptoc.xml是由内部工具生成的。你可能还想看看:https://blogs.mathworks.com/developer/2017/01/13/matlab-toolbox-best-practices/

大卫·桑普森

Andrew,谢谢你的CSS修正!

大卫·桑普森

亚历山大,谢谢你的建议。现在,我只提供基本的钩子,让用户来定义行为。您可以向内容的用户数据添加优先级顺序。

安德鲁Janke

这就跟你问声好!您是否愿意共享此项目的源代码,包括.prj文件和用于打包工具箱的任何构建脚本?我试图打包我自己的工具箱,并有麻烦得到它的HTML帮助文件出现在Windows上的Matlab文档浏览器。我想看看你在做什么可以作为参考。

安德鲁Janke

css文件在表格中有"cellpadding"和"cellspacing"属性。propertytable定义。我不认为这些是有效的CSS属性。也许你需要“table”。Propertytable td {padding: 4px}"代替?

实验后戈德法布

你好,
我有一个关于工具箱的问题。
当使用“插入颜色条”时,轴的大小变化非常大,变得非常小(而颜色条非常大)。
“旋转3D”也会改变轴的大小,并打开一个旋转角度为“Az”和“El”的面板。
提前感谢您的任何建议。

亚历山大·科尔曼

有了对接/解对接功能,如果能够让面板恢复到原来的顺序就太好了。在对接示例中,如果您取消对接Panel 2,然后重新对接它,那么面板的新顺序是1,3,2。也许通过面板上的“优先级”或“顺序”属性可以确定它们在再次停靠时的顺序?

朱利安·兰格

嗨,大卫,谢谢你的回复。是的,在坐标轴上放置一个监听器可能是一个解决方案-我会试一试。不,每个轴都是从类WidgetContainer (Widgets Toolbox)继承而来的已创建类DataAxes的句柄。创建由:uix组成。VBox(for Channel axes Box and Result axes Box) > uix.VBox (for different channels) > uix.HBox (for popup menu left and axes widget right) > uix.Panel > axes (I didn't moved the axes inside a uicontainer because this gave me way too much space between axes and panel borders).
但是使用这种方法会出现另一个问题:当我在里面创建所有的盒子和小部件时,最后一步是安排VBox的高度(-1用于VBox内部的通道,固定大小为120用于HBox的结果轴)。当我重新排列尺寸时,面板内resultAxes的高度轴急剧收缩,即使在面板中有足够的空间来重新排列轴限制更好-或者,甚至更糟(发生在窗口是全屏的时候):resultAxes不情愿地填满了面板的整个空间(OuterPosition =位置不接触ActivePositionProperty…)

我想要的是一种可靠的方法,让所有的轴(通道和结果)在彼此之下,并在不改变轴的大小(特别是宽度)的情况下,在面板内获得最大的显示区域,当添加/删除轴标签,标题,刻度等,有没有更好的解决方案,比把它们放在一起,就像我上面提到的?

大卫·桑普森

Arrale,你能直接联系我MATLAB版本,GLT版本,和简单的复制步骤,让我们诊断问题吗?

大卫·桑普森

朱利安,问得好。听起来好像你需要在ScrollingPanel上设置一个事件来指示何时viewport宽度发生变化,或者何时滚动条消失/出现。作为短期措施,您可以在ScrollingPanel中的坐标轴上监听(未记录的)SizeChanged事件。您是否使用subplot来布局滚动面板中的轴?GLT不做次要情节,有一些技术限制阻止我改进它。

Arrale

我用这个工具箱有问题。当我第一次运行这个程序时,它将花费大约12秒,当我再次运行它时,它将花费少于1秒,当我第一次清空我所有的工作区时,它将再次花费12秒。为什么和如何解决这个问题?

朱利安·兰格

你好大卫,

我目前正在使用您的工具箱创建一个基于oop的应用程序,我在其中细分不同的视图(基于小部件工具箱应用程序示例)。对于一个视图部分,我在彼此下面创建了几个数据图轴,在底部有一个“结果”轴。所有的坐标轴必须具有相同的宽度,这样才能正确地相互比较内容。数据轴的高度不能低于固定的大小(比如150像素)-因此我在ScrollingPanel > VBox中创建了数据轴。当图形窗口中没有足够的空间时,ScrollingPanel的Scrollbar会变得可见,可以很容易地在该面板中滚动。很好。但当滚动条变得可见时,面板中的数据轴的宽度缩小,因此与结果轴的宽度不同,结果轴必须低于滚动面板,因为它应该是一个始终可见的部分。是否有一种方法来调整轴的大小出scrolllingpanel只是相同的宽度的数据轴在ScrollPanel?
我已经尝试了一个SizeChangedFcn,但这也为其他面板的调整大小(没有ScrollingPanels),并给我不好的结果时,只是比较轴的位置在ScrollingPanel和外部。通常情况下,外面的坐标轴变得太大,偏离了图形焦点…我希望这个问题变得清楚了。
谢谢!

亚历山大·陈

辉煌的提交!

我遇到了一个不寻常的问题,当我使用任何类型的BoxFlex时,按下Tab按钮,父图形不再触发WindowKeyPress事件,直到通过单击鼠标重新选择图形上的子图形对象。这意味着由于tab控件,主图形失去了焦点,如果我们正在监听KeyPress事件,这在一定程度上是意料之中的,但是WindowKeyPress事件也会丢失。我怀疑选项卡控件聚焦到一个元素不是主窗口的子元素(或以某种方式隐藏)。这不会发生在非flex盒子上。这不是太大的问题,因为我可以避免使用“Tab”作为键盘快捷键,但它将很好地理解正在发生什么。

干杯!

Mengchen

好的内容!

大卫·桑普森

Kaveh,请参阅GUI布局工具箱文档,第6节“使用MATLAB编译器部署GUI”。您必须显式地将“Resources”文件夹包含在+uix包中。

Kaveh Rajabi

非常感谢桑普森先生开发了这个神奇的工具箱。
当我试图为其中一个gui创建可执行文件时,我遇到了一个问题,在其中我使用了这个工具箱元素。
如果我没弄错的话,MATLAB的编译器似乎不支持这个工具箱的图形元素。万博1manbetx这个问题有解决办法吗?

大卫·桑普森

托马斯,这个包是一个MATLAB工具箱。你可以用普通的浏览器下载并安装它。你也可以通过在MATLAB工具条中的Add-Ons >获取Add-Ons来获得它。

有关工具箱的更多信息,请参见://www.tianjin-qmedu.com/help/matlab/matlab_prog/create-and-share-custom-matlab-toolboxes.html

嗨,大卫,大家好,
我认为安装这个工具箱是我在使用GUI相关功能时遇到的一个错误的解决方案。然而,我为这个“初学者”的问题道歉,但我不知道如何安装工具箱。这是一个应用程序吗?还是一个附加组件?我在包中看不到任何安装功能。
再次抱歉,任何帮助将不胜感激!
谢谢

Hasun汗

大卫·桑普森

帕特里克,谢谢你对滚动条的反馈。与uicontrol('Style','slider')相比,JScrollBar是否提供了优越的功能,外观,或两者都有?

相关的,我一直在研究如何uix。ScrollingPanelcould be implemented for uifigures. Unfortunately there is no MATLAB scrollbar component provided, and embedding a Java-based scrollbar won't work. Maybe uihtml will open up some more possibilities.

帕特里克Legler

嗨,大卫,很棒的工具箱。
我有一个问题。我正在使用你的工具箱结合Widget工具箱。uiw.widget.Tree似乎使用javax.swing.JScrollBar作为滚动条。你的uix。ScrollingPanel似乎使用uicontrol('style', 'slider')作为滚动条。是否有可能改变uix中的滚动条。ScrollingPanel到javax.swing.JScrollBar?
BR

这种Cihan

好的。
谢谢你的反馈。

大卫·桑普森

慈涵,这是不支持的,但这是一个合理的要万博1manbetx求。

这种Cihan

如何设置HBox的最大高度?

克里斯

@Jordan Smith,我不知道你的问题是否解决了,但我遇到过类似的问题。不管出于什么原因,当我在另一个VBox中单独嵌套坐标轴时,它为我解决了这个问题(针对数据提示,但不针对颜色条)。这仍然把它弄得一团糟)。

画了

一帆高

马克

大卫·桑普森

燕君,等待按钮按下的行为并不取决于图的内容。

我不认识函数名waitforbuttonmove和waitforbuttonup。

大卫·桑普森

燕君,请参见文档第5节“在GUIDE gui中使用布局”。以图形方式向GUIDE添加占位符面板,然后以编程方式添加GUI Layout Toolbox容器及其内容。

克里斯

宿州农村汉族

亲爱的大卫,
当我使用布局放置一个轴,因为轴的父母不是一个数字,我如何使用交互式函数,如getcurrentPoint, waitforbuttonpress, waitforbuttonmove,和waitforbuttonup ????

Z刘

宿州农村汉族

嗨,大卫
为了在GUIDE gui中使用布局,如何在布局中添加元素????

亚当

达尼

戳。PNG-free版本的ui . tabgroup ?

大卫·桑普森

Jordan,你需要将XLimMode设置为“手动”吗?(设置XLim可以做到这一点,但其他后续操作可能会将其设置回'auto'。)

约旦史密斯

嗨,大卫,这个套餐太棒了!我遇到了一个问题,如果我有一个坐标轴放在VBox中,我想防止坐标轴在坐标轴上放置一个元素后缩放,例如在特定的X和Y坐标上的一个标记。调用“axis”函数将坐标轴缩放到原始极限只适用于y轴,x轴保持在缩放极限。我看了看修改DataAspectRatio,但这只打乱了ui . panel中轴的调整大小功能。我想保持坐标轴的限制固定,这样我就可以用鼠标回调在坐标轴周围拖动标记。任何关于维护X限制的反馈都将非常感激!

大卫·桑普森

Laxmi,请分享一个简单的例子,可以通过这些评论与GLT社区分享,也可以直接通过“联系作者”按钮与我分享。

你的事迹Volvoikar

谢谢David,我们已经写好了代码并重新养育了这个孩子,我的问题是当我们取消停靠图形时,所有的图形都自动洗牌,最后留下空白面板,我想知道我们是否可以停止这种洗牌,保留停靠前的图形的位置。

大卫·桑普森

Laxmi,您需要(也可以)自己编写停靠/取消停靠行为的代码。具体地说,您的停靠代码应该同时重定向子对象——将子对象放在Contents的末尾——然后重新排列Contents。

你的事迹Volvoikar

我尝试了面板的dock/undock的例子,根据文档,
我看到图形往后停靠时面板的位置会发生变化,有没有办法保持原来的位置?

大卫·桑普森

哎哟,2颗星。

Florian Kroetz

uix。BoxPanel不支持子图。万博1manbetx
解决方法:在uix.BoxPanel中使用uipanel。

亚当

甄梁

大卫·桑普森

Iv,我们不支持GLT中不万博1manbetx区分大小写或截断的属性匹配。

lv这里

一个神奇的工具!非常有用!
这里有一个小问题,我发现:它不能识别'parent'在下面的代码,你必须大写的第一个字母为'parent',以使代码结果正确。
>> f = figure();
>>b = uiextras。VBox( 'parent', f );
>>b1 = uiextras.HBox('parent',b);
>>b2 = uiextras.HBox('parent',b);
uicontrol('parent', b1, 'Background', 'r')
uicontrol('parent', b2, 'Background', 'b')
实际上,用小写字母写PropertyName肯定是个坏习惯。但它也可以在MATLAB中使用。当你没有注意到这个奇怪的bug时,它真的很难修复。

拉法桑切斯

Scofieldgzf

Kai Lehmkuhler

好的,谢谢你的信息。也许能帮上点忙。然而,捕捉崩溃和显示友好的警告将非常感谢。很好的工具箱。

大卫·桑普森

Kai,请参阅我在2018年10月6日发表的关于这个话题的评论。

Kai Lehmkuhler

当将布局图保存到.fig文件并重新加载时,Matlab会崩溃,必须关闭。

警告:当加载类'listener'的对象时:
没有构造函数事件。找到匹配签名的监听器'。
在matlab.graphics.internal.figfile.FigFile/读取(第31行)
在matlab.graphics.internal.figfile.FigFile
在loadFigure中(第31行)
在openfig>localOpenFigure中(第69行)
在openfig(第40行)中
在open(第141行)
在uiopen中(第167行)
警告:加载期间:
类时检测到无效的默认对象
类event.listener的异构数组。类的空数组
事件。将返回Listener。
在matlab.graphics.internal.figfile.FigFile/读取(第31行)
在matlab.graphics.internal.figfile.FigFile
在loadFigure中(第31行)
在openfig>localOpenFigure中(第69行)
在openfig(第40行)中
在open(第141行)
在uiopen中(第167行)

大卫·桑普森

帕塔,谢谢你让我注意到这个问题。对于该右键单击,右键单击中的HitObject意外地为空。以下更改为uix。分频器/ isMouseOveris required:

tf(ii) = tf(ii) && ~isempty(eventData. eventData.)HitObject) && obj(ii)。控件== eventData.HitObject;

patta

patta

奇怪的事情发生在评论上,我的第一个评论消失了。

再次:

当使用HBoxFlex时,当使用鼠标右键完成ROI时,从图像处理工具箱中使用可见分割器和绘制多边形时,会出现一个问题。

代码:

Hb = uix。HBoxFlex('Parent', figure()); axes('Parent', hb); axes('Parent', hb);
显示亮度图像(rand(64、64));
drawpolygon

错误是

-------------------------------------------------------------------
警告:在执行为类定义的事件WindowMousePress的侦听器回调时发生错误
matlab.ui.Figure:
||和&&操作符的操作数必须转换为逻辑标量值。

ui错误。分频器/isMouseOver (line 261)
Tf (ii) = Tf (ii) && obj(ii)。控件== eventData.HitObject;

ui错误。HBoxFlex/onMousePress (line 103)
loc = find(obj.ColumnDividers.)isMouseOver(eventData));

uix.HBoxFlex>@(varargin)obj.onMousePress(varargin{:})错误(第307行)
WindowMousePress, @obj。onMousePress);

uiwait错误(第81行)
waitfor (hFigDlg, 'WaitStatus', 'inactive');

图片错误。roi.internal. roi /绘制

drawpolygon错误(第174行)
h.draw;
在uiwait中(第81行)
在images.roi.internal.ROI /画
在drawpolygon中(第174行)
-------------------------------------------------------------------

然而,drawpolygon返回的ROI乍一看是正确的。不过,我想这是一个bug。

Matlab版本是'9.6.0.1099231 (R2019a) Update 1',工具箱版本是几分钟前安装的最新版本。

谢谢这个非常有用的软件!

patta

我忘记了:

版本:9.6.0.1099231 (R2019a

工具箱最新版本,几分钟前安装的。

彤,请参阅GUI布局工具箱文档第6节“使用MATLAB编译器部署GUI”。您必须显式地将“Resources”文件夹包含在+uix包中。

建成

你好大卫,
当我启动我的应用程序生成的“MATLAB编译器”,我总是得到错误消息:
使用uix时出错。loadIcon(line 34)
类'uix '中'DividerMask'属性的默认值无效。TabPanel”:
无法打开tab_NoEdge_NotSelected.png文件。
ui错误。TabPanel/getDividerMask (line 902)
viewMain/createGui中的错误(第62行)
viewMain中的错误(第45行)
main中的错误(第2行)

但奇怪的是,在MATLAB中,主文件可以成功启动而没有任何错误或警告。

提前感谢您的反馈!

大卫·桑普森

Rakshan,这是一个复杂的任务,我们通常会通过咨询来支持,尽管你可以把它当作一个挑战!万博1manbetx一般来说,你需要在感兴趣的目标上检测按下按钮,然后跟踪和更新鼠标移动,然后在按上按钮时释放。

主要挑战有:
(1)按下按钮的目标是什么——面板标题,面板背景,面板内容?
(2)发明和实现当鼠标移动时的合理逻辑
(3)避免与柔性面板分隔器产生不必要的相互作用——您确定需要可拖动分隔器*和可重新排序面板吗?

Rakshan库马尔

你好大卫,

我想能够洗牌盒面板的位置在用户界面。最好通过拖动面板来进行Gridflex。您能否建议是否可以使用提供的功能?

谢谢,
Rakshan

Vyshakh光伏

大卫·桑普森

Andreas, TabPanel遵循其他GLT容器的编程模型。要添加内容,请将新子元素的Parent设置为TabPanel。若要重新排列内容,请将contents属性设置为自身的排列。

作为对所有人的提醒,请使用uitab和uitabgroup,除非你需要禁用选项卡,或正在编写需要在R2014b之前运行的代码。

Andreas杜诺

如果我有一个TabPanel与一些任意的内容(我有面板和或表),我希望改变内容,我将如何做?
addChild, removecchild和reorder都是受保护的方法。

亚当

这取决于你想付出多少努力。您可以使用AppDesigner创建一个常规GUI,然后开始以编程方式插入布局并重新养育所有组件,但这可能需要付出大量努力。与GUIDE一样,你可以在AppDesigner中留下一些空白面板,然后用编程方式填充它们,但你不能在可视化GUI设计器部分中从这个工具箱中拖动小部件。

必应严

这是否适用于AppDesigner?

马修角落

Matthew,我猜你想要的不仅仅是下料板,还有滚动条槽,以改变面板的背景色。无法更改滚动条按钮和滑块的颜色。

我认为谷底作为默认值是可以的。它包含滚动按钮和滑块,所以认为它的好保持为灰色。

大卫,谢谢你的解释。变通方法是一个很好的选择。

Igor Varfolomeev

@Randy Souza,谢谢你的修复!

Igor Varfolomeev

@David Sampson,是的,新拉链非常好用,谢谢!

大卫·桑普森

Geovany,你是对的,GLT容器不能很好地使用图例和颜色条。我们不能做得更好有技术上的原因。在文档2.3节“颜色条和图例”中有进一步的讨论。

解决方法是将有问题的轴放在一个uicontainer(或带有标题的uipanel”)中,填充GLT容器。

B = uix。BoxPanel( ... );
c = uicontainer('Parent', b,…);
a = axes('Parent', c,…);
传说(a,…)

Legend与'ui . panel '不兼容。下面是一个使用“传说”后情节消失的最小示例。

F = uix。面板('Parent', figure);
axesH = axes('Parent',f);
plotH = plot(axesH, 1:5, rand(1,5));
传说

当然,我可以使用'uipanel'代替,但我感兴趣的是使用许多uix。*元素。

兰迪·苏扎

@Terry Brennan, @Igor,我们已经修复了空的zip问题,并替换了一个有正确文件的zip包。对此造成的不便深表歉意。

大卫·桑普森

特里和伊戈尔,谢谢你们,你们说得对。我会让文件交换小组马上处理这件事。

伊戈尔

@David Sampson“空拉链”的问题没有解决。我刚刚下载的文件是36.8kB,只包含0大小的文件。

特里布伦南

我不确定拉链是否修好了。我试图下载zip版本,所有的文件都是空的。

大卫·桑普森

亲爱的zip文件用户,丢失的加号的情况现在解决了。

GUI Layout Toolbox是以mltbx格式上传的,但是File Exchange有一个例程,可以为喜欢这种格式的人生成一个等价的zip文件。该例程有一个错误,即包文件夹名称中丢失了“+”。这个错误现在已经修复。

小君

问题解决了。

小君

当我使用GUI Layout Toolbox 2.3.4版本启动我的应用程序时,我总是得到错误消息:

使用uix时出错。loadIcon(line 34)
类'uix '中'DividerMask'属性的默认值无效。TabPanel”:
无法打开tab_NoEdge_NotSelected.png文件。

ui错误。TabPanel/getDividerMask (line 902)
面具。EF = indexColor(uix。loadIcon( 'tab_NoEdge_NotSelected.png' ) );

FGECTorqueTool错误。TorqueTool(第37行)
Tabs = uix。TabPanel( 'Parent', fig, 'Padding', 5 );

当第一次安装工具箱时,它工作得很好。但是在重新启动MATLAB并启动应用程序后,它就停止工作并显示错误信息。知道为什么会出现这些错误吗?

大卫·桑普森

艾德里安,我有两个建议。第一个是li = listener(a,'XLim','PostSet',@cb),其中a是感兴趣的轴。第二个是使用m = zoom(f), m. actionpostcallback = @cb,其中f是感兴趣的数字。

我有一个基于demoBrowser示例的应用程序,我在其中一个框中绘制数据。是否有一种方法可以捕获用户放大时的情况,并在用户放大足够大时在每个数据点上重新绘制带有标签的散点图?我假设我需要添加回调函数的一些地方,但不能找到适当的对象?

小君

谢谢大卫的帮助。工具箱已安装完成。

大卫·桑普森

君,请下载“工具箱”(.mltbx),而不是“Zip”。MATLAB将内容提取到它的“add -ons”区域,并将所需的文件夹添加到路径中。

有关工具箱的更多信息,请参见://www.tianjin-qmedu.com/help/matlab/matlab_prog/create-and-share-custom-matlab-toolboxes.html

小君

我安装这个工具箱有困难。下载GUI Layout Toolbox 2.3.4.zip后,我解压到GUI Layout Toolbox 2.3.4文件夹中,并将此路径添加到matlab搜索路径中,但matlab仍然无法找到此安装。命令转换器不显示此工具箱已安装。安装这个工具箱的正确方法是什么?

亚当

只是在下面添加注释,因为我也刚刚注意到文件夹上缺少+的问题(与我从zip文件下载Widgets Toolbox时相同)。我们也总是使用zip文件,原因和Dani一样,我们把所有的代码,包括第三方代码,保存在一个存储库中,这样我们就可以从存储库中签出代码并运行它,而不必单独安装工具箱。我没有过多地研究工具箱安装,但我不知道这将是使用它的一个选项。

大卫·桑普森

Michala,该错误表明您正在运行GUI布局工具箱1。x在MATLAB R2014b或更高版本。您需要GUI布局工具箱2。X,你可以从这个页面下载。

从R2014a到R2014b的MATLAB图形的变化是显著的,不可能创建一个GUI布局工具箱,可以同时工作于两者。用户(“你的”)代码应该对这两种情况都有效。X和2。X,除了在2中列出的具体项目。第2.2节“与版本1的兼容性”。

大卫·桑普森

埃里克,有最新进展。修复很简单,这个问题将在下一个版本中得到解决。

大卫·桑普森

埃里克,你说得对。不幸的是,文档是使用一个旧的内部工具生成的,该工具已不再维护。我看看能做些什么。

亚伦常

Michala Markova

嗨,伙计们,
我的兼容性有问题。我已经在Win7, Matlab 2016a上成功地使用这个工具箱至少两年了。现在我已经更改为Win10和Matlab 2018a。因为我后来遇到了工具箱的问题,我也安装了2016a(在Win10上)。获取静止错误。

问题在一开始就有了
p = figure('Units', 'Pixels', 'OuterPosition',[100 100 1000 800],…
“工具栏”、“没有”、“菜单”,“没有”、“名称”、“EMGAT16设置”);

B1 = uiextras。HBox('Parent', p, 'Spacing', 5);

在Matlab 2016a中,win10的误差为:
使用uiextras时出错。容器(第66行)
尝试使用双手柄MATLAB图形在新的图形系统上运行。请重新安装。

在Matlab 2018b中,Win10是不同的:
没有构造函数句柄。找到匹配签名的监听器'。
uiextras错误。容器(line 95)

怎么了?

大卫·桑普森

马修,我猜你想要的不仅仅是下料板,还有滚动条槽,以改变面板的背景色。无法更改滚动条按钮和滑块的颜色。

马修,做得好,我会解决的。

马修角落

你好大卫,

ui . scrollingpanel的小视觉问题。当水平和垂直滚动条都显示时,显示在右下角的“消隐板”不匹配ScrollingPanel的背景颜色,如我所料。例:如果我设置背景为黑色,它仍然显示为默认的灰色。

这会导致主背景色不是默认gey的gui看起来有点奇怪。

复制代码:
f = figure('Color', [0 0 0])
scl = uix。ScrollingPanel('Parent', f, 'BackgroundColor', [0 0 0])
Vbox = uix。VBox('Parent', scrl, 'BackgroundColor', [0 0 0])
scrl。MinimumHeights = 2000;
scrl。MinimumWidths = 2000;

大卫·桑普森

Rakshan,你没有提供完整的复制步骤,但尽管如此,我有一些反馈。
1.Copyobj用于复制对象,而不是移动它。通过设置对象的parent属性,可以将对象从一个父对象移动到另一个父对象。
2.你可以在面板中创建坐标轴——a = axes('Parent', p)——而不是在gcf中创建它们并移动它们——a = axes();a.Parent = p。
3.如果你重映坐标轴,那么MATLAB将重映相应的图例。
4.看起来你已经知道了这一点,但对于带有图例和颜色条的轴,你需要把它们放在GLT容器的uipanel中,而不是直接在GLT容器中。

Rakshan库马尔

我正在使用GUI布局工具箱创建一个uix.GridFlex()内部的多个图形uipanel。

然而,我无法将图形设置为uipanel作为子对象,并获得所有的图形对象复制到面板,我必须做以下步骤

for i = 1:numFigures
set(uiPanelFig(i), 'Title', get(figureHandles(i),'name'));
selectedFigAxes = findobj(figureHandles(i),'type','axes');
figAxes = findobj(selectedFigAxes, 'type', 'axes', '-not', 'Tag', 'legend', '-not', 'Tag', 'Colorbar');
for ii = length(figAxes): -1: 1
(ii).Legend;
如果~ isempty (legendAxes)
copyobj([legendAxes, figAxes(ii)], uiPanelFig(i), 'legacy');
其他的
copyobj(figAxes, uiPanelFig(i), 'legacy');
结束
结束
结束
copyobj()将某些数字复制到uiPanel几乎需要22秒。请建议是否有任何替代的解决方案,以反映的uipanel与所有的对象的数字。

大卫·桑普森

Batuhan, ver('layout')是你所需要的。

相关的,我们将开始在R2019a中发布检索工具箱依赖项的新功能。

Batuhan Yetisener

你好大卫,

有点不相关,这是一个新手问题关于你神奇的工具箱!我目前正在尝试开发一个基于“GUI布局工具箱”的开源项目,使创建Matlab工具条,如菜单非常容易的遗留图形。无论如何,首先我必须检查用户是否安装了GUI布局工具箱,显然。

license('test', 'GUI Layout Toolbox')总是倾向于返回0,我相信这是因为我需要使用工具箱的实际特性名称,而不是命令"ver"列出的名称。

我想知道那个名字是什么。或者你有其他的解吗?万博 尤文图斯我不想实现一些肮脏的解决方案,如使用“ver”获得所有许可证名称,并通过使用函数“isfield”或任何类似的东西检查名称“GUI Layout Toolbox”。

请继续这项伟大的工作。
非常感谢,
Batuhan

大卫·桑普森

Dani,在FX问题解决之前,安装更新的mltbx,并从附件文件夹中获取更新的代码。

大卫·桑普森

嗨,Dani,谢谢你对zip文件的反馈。FX mltbx-to-zip转换器确实有一个问题,FX团队的一名成员正在解决它。

相关的,我们有一些功能来编码和检索工具箱依赖项。

与此无关,感谢对无png标签的鼓励!

达尼

你好大卫,
我们仍然使用zip的原因是因为GUI布局工具箱是几个更大的开发项目的一部分。我们在源代码控制系统中拥有所有的东西,每个检查它的人都应该得到所有的东西,包括所有必需的外部库,如GLT。这就是我们避免mltbx的原因。
什么时候unix的PNG-free版本。TabGroup来吗?
欢呼,
达尼

大卫·桑普森

Swaroop uix。面板positions its contents to fill the available space, less padding. If you set the contents position explicitly then it will be reset on the next uix.Panel resize. If you want a panel that does not reposition its contents then use uipanel. If you want to plug in your own resizer then use uipanel with SizeChangedFcn.

SWAROOP惠普

你好大卫,
我需要一些帮助在一个ui .panel内定位合适的。我试图通过指定位置属性[x y w h]定位适合,但它是不工作的,表正在父组件的左上角创建。找到下面的代码。
我还想知道表的大小是否根据不同的分辨率进行调整,如果它放在一个ui . panel内。万博 尤文图斯

f =图();
p1 = uix。面板( 'Parent',f);
RowName = {'A','B','C','D','E','F','G','H','I'};
数据= 0 (9,1);
p2 =场上(“父”,p1,…
“单位”、“规范化”、“位置”,(0.2 - 0.55 0.45 - 0.38),……
“字形大小”,14日……
RowName‘RowName’,‘Columnname’,{“价值”},……
“数据”,数据,ColumnEditable, ~[0],“RearrangeableColumns”,“上”);

大卫·桑普森

丹妮,谢谢你发现了这个问题。zip文件是从mltbx文件自动生成的,但看起来这并不能正常工作。该问题已报告给File Exchange开发团队。

出于兴趣,为什么使用zip文件而不是mltbx文件?GLT2支万博1manbetx持R2014b之后…与引入MLTBX文件的版本相同。我没有期望任何GLT2用户使用zip文件。

达尼

在最新版本的ZIP中,uix、uiextras和mixin文件夹没有前导+(被空格代替)。

大卫·桑普森

米歇尔,我有几个想法。是的,我们希望改进对MATLAB布局管理的产品内支持,而uigridlayout万博1manbetx就是朝这个方向迈出的一步。这一领域的新开发需要时间,而且只针对基于javascript的图形。客户的采用率也会有所不同,因为大客户不会立即采用新版本。我们还需要支持成千上万的GUI布万博1manbetx局工具箱用户顺利过渡,我们有几个想法如何做到这一点。

你好大卫,
我还没有安装2018b版本,但我已经了解了新的对象uigridlayout (https://it.mathworks.com/help/matlab/ref/uigridlayout.html).
它的功能似乎与您的工具箱非常相似。这是否意味着你要为uifig图开发一个文档化的/内部的GUI布局工具箱功能实现?

Takafumi Shiino

你好,我的用户界面面板出了点问题。
如果滚动面板的高度设置为1806或更高,面板下方会出现错误的空白。
你能帮我解决这个问题吗?
演示问题的简单代码如下所示。

f1 = figure('Units', 'normalized');单位不是像素
Sp1 = uix。ScrollingPanel(“父”,f1);
%p1 = uipanel('Parent', sp1);
P1 = uix。面板('Parent', sp1);
sp1。高度= 2000;
ViewAxes1 =轴(p1,“单位”,“像素”,“位置”,[1 1 200 200],“XTick”,[],“YTick”,[],“可见”,“上”,“颜色”,“k”);

奥利费尔法克斯

大卫,谢谢你的评论。我还有一个有趣的问题……我试图覆盖许多轴,以便每个情节可以有自己的y轴清晰。我知道这个概念是可行的(我以前见过),但我在使用GUI布局工具箱时遇到了困难,当它使用Flex调整大小时。我已经把坐标轴放在一个VBox(这是在一个HBoxFlex),强制所有的位置都是相等的,并设置“颜色”为“none”。到目前为止一切都很好,但当我试图调整父HBoxFlex的大小时,所有的轴都重置为垂直堆叠。我试过把它们直接放入一个面板,但每一个新的轴都会覆盖之前的一个…有没有办法从调整大小中使用回调,这样我就可以重新堆叠它们?或者另一种叠加多个轴的方法?谢谢!

大卫·桑普森

新版本2.3.4修复了R2018b之后的一个bug,该bug由于轴线工具栏实现的微妙性而导致内容的意外重新排序。

这个问题是在MathWorks的内部使用中注意到的,但我没有收到任何客户错误报告。我猜这意味着你们中的许多人还没有使用R2018b。

大卫·桑普森

如果考虑v1和v2, GUI布局工具箱现在是评论最多的文件交换提交。感谢用户社区提供的反馈,包括错误报告和增强请求,以及提问和回答问题。

大卫·桑普森

要删除GUI布局工具箱容器c中的所有内容,请使用delete(c. contents)。在大多数情况下,c.Contents和c.Children将包含相同的元素,因此delete(c.Children)也可以。(Contents也会显示HandleVisibility关闭的子对象,比如allchild(c)。)这是uipanel和uicontainer的唯一选项,因为Contents是一个GUI布局工具箱属性。

大卫·桑普森

Will,感谢您对使用GUI布局工具箱与新的MATLAB网络图形感兴趣。我认为您喜欢最近版本中引入的一些新组件的外观。我最近在这方面做了一些进一步的工作,但不能承诺发布日期。这是一个具有技术挑战性的任务!

大卫·桑普森

Deepak,在GLT文档中有一些关于结合使用GUI布局工具箱和GUIDE的讨论。然而,正如Adam所说,一旦您熟悉了编程工作流,使用GUIDE就没有太大意义了。

大卫·桑普森

罗兰,我觉得你应该用ui。CardPanelinside b2 to switch between Panel_one and Panel_two. You use set the Selection property of the CardPanel to switch -- c.Selection = 1 will show the first element of c.Contents, etc.

另外两点:
* uix。面板does provide a Selection property, like uix.CardPanel. However, I regret that choice, and may remove it in a future release. I think that uix.Panel should simply maximize its contents and not touch their visibility.
* uistack将导致对象从树中删除并添加到树中,这将使GLT感到困惑。

奥利费尔法克斯

嗨,我如何删除面板内的所有内容(框)?

将授予

任何状态更新的移植使用的应用程序设计器?

亚当

fenix.d.0831

斯特凡·德·格鲁特

亚当

我有时将GUIDE和GUI布局工具箱混合,只是在GUIDE中放置一个占位符面板,我将使用它,在代码中作为布局和其他组件的父组件,我希望添加。它必须通过编程完成,在面板内,所以如果你想使用整个UI的布局,使用GUIDE没有太多的优势。

迪帕克panday

你好,
我正在使用指南为我的项目设计GUI。我想知道我如何可以使用您的工具箱内部指南GUI ?

罗兰Higler

你好大卫,

我的工作与堆叠面板在嵌套的HBoxFlex和VBoxFlex选项组图形用户界面。
为了使两个面板之间的切换成为可能,我设置了开关面板的“可见”属性为开和关。然而,这导致开关面板中的标签保持不可见。在改变HBoxFlex的大小后,它们再次出现。
你能帮我解决这个问题吗?

演示问题的简单代码如下所示。
f =图;

b = uix。HBoxFlex( 'Parent', f );
b1 = uix。面板('Parent',b,'Title', 'b1');
b2 = uix。面板('Parent',b,'Title', 'b2');

%开关面板1
Panel_one.c = uix。HBoxFlex( 'Parent',b2 );
Panel_one.c Panel_one.c1 = uix.Panel(“父”,“标题”,“c1-1”);
Panel_one.c Panel_one.c2 = uix.Panel(“父”,“标题”,“c2-1”);
Panel_one。e=uitabgroup('Parent', Panel_one.)c2);
Panel_one.e Panel_one.e1 = uitab(“父”,“标题”,“e1-1”);
Panel_one.e Panel_one.e2 = uitab(“父”,“标题”,“e2-1”);

%开关面板1
Panel_two.c = uix。HBoxFlex( 'Parent', b2 );
Panel_two.c Panel_two.c1 = uix.Panel(“父”,“标题”,“c1-2”);
Panel_two.c Panel_two.c2 = uix.Panel(“父”,“标题”,“c2-2”);
Panel_two。e=uitabgroup('Parent', Panel_two.)c2);
Panel_two.e Panel_two.e1 = uitab(“父”,“标题”,“e1-2”);

暂停(1)
集(Panel_one.c,“可见”,“关闭”);
集(Panel_two.c,“可见”,“关闭”);
暂停(1)
集(Panel_one.c,“可见”,“上”);
uistack (Panel_one.c,“顶级”);
暂停(1)
集(Panel_one.c,“可见”,“关闭”);
集(Panel_two.c,“可见”,“关闭”);
暂停(1)
集(Panel_two.c,“可见”,“上”);
uistack (Panel_two.c,“顶级”);
暂停(1)
集(Panel_one.c,“可见”,“关闭”);
集(Panel_two.c,“可见”,“关闭”);
暂停(1)
集(Panel_one.c,“可见”,“上”);
uistack (Panel_one.c,“顶级”);

非常感谢
罗兰

何竹竹

卡洛斯Santacruz-Rosero

大卫·桑普森

Eddie,很好的建议,设置一个属性来控制行大和列大。列主要将保持默认的兼容性。

埃迪

嗨,大卫,有机会整合我给你发的网格方向选项吗?目前网格是按列排序的,如果能有一个选项来按行排序网格就好了。

当前网格排序(逐列)-
1 3
2 4

逐行排序(可选)-
1 2
3 4

我目前对行排序的解决方法是更改Grid中的第252行。米
[iy, ix] = ind2sub([r c],转置(1:n));

[ix, iy] = ind2sub([c r],转置(1:n));

的大作

找到这个工具箱就像在IE6时代发现JQuery一样
它没有覆盖所有的东西,但它做得很好,而且它是面向对象的!^ _ ^

为什么这不是Matlabs核心的一部分呢?

Hermann-Joseph

做得好,稳定和超级有用,使gui布局灵活多变。

谢谢你

问候

赫尔曼

大卫·桑普森

斯文,我有一些意见。您对代码的描述表明您使用的是类似版本2.2.1的东西。你所描述的问题与R2018b中新的“轴线工具栏”有关。在最新版本2.3.3中发布了一个修复。

如果有dbstop(如果所有错误),或者有(如果所有错误)中的dbstop(如果所有错误),或者类似情况,则可以击中未设置的断点。

昨天我被通知R2018b的另一个问题,内容中的轴的顺序可能不正确。我们正在调查。如果你碰到了这个错误,请在这里发帖或直接通过上面的作者链接联系我。

斯文

大卫:也许这个问题已经在你这个月的工作中解决了,但是在2018b底层轴对象的变化中,可能会出现另一个可重复的奇怪行为:

F =图();
G = uix。GridFlex( 'Parent', f, 'Spacing', 5 );
坐标轴('Parent', g)

上面的代码在2018a运行良好。
没有抛出错误,但在2018b中,代码停止在Grid中。M在第258行,好像在那里放置了一个断点(它没有)。这一行写着“孩子”。单位= '像素';"

解决方法是将坐标轴对象封装在uicontainer中:

F =图();
G = uix。GridFlex( 'Parent', f, 'Spacing', 5 );
坐标轴('Parent', uicontainer('Parent',g))

马修角落

谢谢大卫。

大卫·桑普森

Matt,我已经找到并修复了这个问题,并将在本月的一个版本中包含它。

马修角落

大卫,下面复制代码。
---------------
% bug行为
f1 = figure('Units', 'normalized');单位不是像素
Sp1 = uix。ScrollingPanel(“父”,f1);
t1 = uicontrol('Parent', sp1,…
'Style', 'text',…
'String', '不能用鼠标滚轮滚动');
sp1。高度= 1000;

%预期行为
F2 =数字;
Sp2 = uix。ScrollingPanel(“父”,f2);
t2 = uicontrol('Parent', sp2,…
'Style', 'text',…
'String', '可以用鼠标滚轮滚动');
sp2。高度= 1000;

大卫·桑普森

马特,你能在这里或通过电子邮件分享简单的复制步骤吗?

马修角落

大卫,

一直在使用ui。ScrollingPanelin a recent project and have been having issues with mousewheel scroll not working. Seems to occur when the parent figure units are not pixels. Using 2017b.

问候,
马特

Vasil Stoimenov

我安装了GUI布局工具箱2.3。MLTBX成功了。

Vasil Stoimenov

大家好!

我是新的matlab,我试图运行一个脚本,在此刻,我也是新的。

我有以下错误:未定义变量“uix”或类“uix. hbox”。

你能帮我,是一些包没有正确安装或我的Matlab不支持'uix'吗?万博1manbetx

欢呼,
Vasil

yubin余

大卫·桑普森

Bryant,看来你报告的问题是在GUI布局工具箱2.3.3版本中引入的。至少我对R2018b中不同版本的测试是这样显示的。如果有人在GUI布局工具箱的早期版本中遇到了这个问题,那么请发布,以便我可以扩大搜索空间。

大卫·桑普森

感谢科比的这些微小的复制步骤。现在我们——包括MATLAB图形团队——可以研究了。

布赖恩特

大卫,我已经通过电子邮件发送了这个片段,但我想在这里分享一下:

Fh =图();
Vb = uix。VBox('Parent', fh);
ax = axes('Parent', fh);
斧子。Parent = vb;

在画布之间移动节点时发生错误

大卫·桑普森

uix。BoxPanel继承自uipanel, uipanel是属性“TitlePosition”的所有者。目前BoxPanel忽略这个属性值,总是在顶部绘制标题框,在左侧绘制标题框。我可以使BoxPanel荣誉TitlePosition,并创建了一个增强请求。这不是一个微不足道的变化。

大卫·巴里

大卫,

我想在uix的中心标题字符串。BoxPaneland noticed the TitlePosition property but changing this property doesn't seem to do anything.

1)是否有办法将标题字符串居中?
2) TitlePosition属性是用来干什么的?

问候
大卫

大卫·桑普森

布莱恩特,请通过我的文件交换配置文件发送复制步骤,以便进行调查。

布赖恩特

我看到一个问题在MATLAB R2018a重新养育任何坐标轴,刚刚创建。

"在画布之间移动节点时发生错误"

有一个简单的解决方法,即在游戏暂停后第一次失败后再尝试一次。

大卫·桑普森

最新的更新修复了一个影响MATLAB R2018b用户的错误。

大卫·桑普森

胡曼,这个问题与R2018b中新的“轴线工具栏”有关。我会尽快解决的。

Hooman Sedghamiz

谢谢你的辛勤工作。我发布了一个信号处理工具箱,它使用GUI布局工具箱进行可视化。然而,我们的一个用户报告了一个错误,似乎与您的工具箱有关。如果您能解决这个问题,我将不胜感激。

错误报告:
操作系统和Matlab版本:Linux (Ubuntu 18.04)上的Matlab 2018b。

错误报告:
警告:在执行为类uix定义的事件ChildAdded的侦听器回调时发生错误。ChildObserver:
类'matlab.ui.controls.ToolbarStateButton'的不可识别属性'Units'。

ui错误。setPosition(line 13)
o.Units = u;

ui错误。面板/redraw (line 56)
uix。集Position( obj.Contents_(selection), position, 'pixels' )

ui .mixin. container /set错误。脏的(第132行)
Obj.redraw() %现在重绘

uix.mixin错误。容器/addChild (line 222)
obj。脏=真;

uix.mixin错误。面板/addChild (line 88)
addChild@uix.mixin.Container(obj, child)

uix.mixin错误。容器/onChildAdded (line 162)
obj。addChild (eventData。孩子)

uix.mixin.Container>@(varargin)obj.onChildAdded(varargin{:})中的错误(第51行)
childdobserver, 'ChildAdded', @obj。onChildAdded);

ui错误。ChildObserver/addChild (line 109)
notify(obj, 'ChildAdded', uix。childdevent (oChild))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

uix.ChildObserver>@(~,e)obj.addChild(nChild,e. child)中的错误(第96行)
@ (~, e) obj.addChild (nChild e.Child));

matlab.graphics.controls.AxesToolbar/parentToolbarToAxesPane错误

matlab.graphics.controls.ToolbarController/handleMouseMotion错误

在matlab.graphics.controls.ToolbarController>@(e,d)obj.handleMouseMotion(e,d)中出错
>在uix中。childdobserver /addChild(第109行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix。childdobserver /addChild(第116行)
在uix.ChildObserver>@(~,e)obj.addChild(nChild,e. child)(第96行)
在matlab.graphics.controls.AxesToolbar / parentToolbarToAxesPane
在matlab.graphics.controls.ToolbarController / handleMouseMotion
在matlab.graphics.controls.ToolbarController > @ (e、d) obj.handleMouseMotion (e、d)

大卫·桑普森

布莱恩特,请看我2017年11月7日的回复。

R2018b更新:
*一个网格布局已添加到MATLAB中。GUI布局工具箱的用户可能想看一看。
* uifigures支持鼠标事件。万博1manbetx因此,从这个版本开始,将有可能支持基于javascrip万博1manbetxt的图形的伸缩容器。注意这个空间。

布赖恩特

这是否适用于appdesigner?如果没有,是否会添加支持?万博1manbetx

大卫·桑普森

Ian,不支持保存包含GUI布局工具箱容器的图形。万博1manbetx

我有一段时间没有研究这个问题了,但我的回忆如下。这个工具箱使用监听器来检测添加和删除子元素。侦听器是不可序列化的。可以在加载时通过强制运行构造函数来重新创建侦听器,但是在那个时候,对象没有连接到树中,并且在添加它们时,加载过程中没有后续事件。

我可以阻止崩溃,但产生的容器会变成僵尸。

伊恩•菲利普斯

伟大的工具箱。

我想知道是否有可能将这个工具箱生成的GUI保存为“。”无花果的文件。
我已经尝试过了(参见下面的代码)。它看起来保存得很好,但是当我试图加载文件时,Matlab崩溃,并显示一个访问违反错误消息。
我尝试过Matlab 2017b和2018a。

有什么建议/想法可能导致这个问题吗?

--------------------------------------------------------------
fig_name = sprintf('TEST摘要GUI ');
hMainFig = figure('Name', fig_name,…')
'NumberTitle', 'off',…
'position',[400 100 1000 800]);

%创建一个选项卡面板
tabTitle = [""];
hHorTabGrp = uix。TabPanel( 'Parent', ...
hMainFig,……
“填充”,0);

定义摘要选项卡
tabTitle(1) = "摘要";
hTabSum = uix。面板( 'Parent', hHorTabGrp, 'Padding', 3, 'Title', '');
G1 = uix。GridFlex( 'Parent', hTabSum, 'Spacing', 3);
P1 = uix。面板('Parent', g1);
面板{3}= uix。BoxPanel('Title', 'P3 - Phase', 'Parent', g1);
面板{4}= uix。BoxPanel('Title', 'P4 - Const', 'Parent', g1);

P2 = uix。面板('Parent', g1);
set(g1, '宽度',[-1 -2],'高度',[-2 -1]);

G2 = uix。GridFlex('Parent', p1, 'Spacing', 3);
面板{1}= uix。BoxPanel('Title', 'P1 - PolRot1', 'Parent', g2);
面板{2}= uix。BoxPanel('Title', 'P2 - Spectrum', 'Parent', g2);
set(g2, 'Heights', [-1 -1]);

G3 = uix。GridFlex('Parent', p2, 'Spacing', 3);
面板{5}= uix。BoxPanel('Title', 'P5 - Taps', 'Parent', g3);
面板{6}= uix。BoxPanel('Title', 'P6 - BER', 'Parent', g3);
set(g3, ' width ', [-1 -1]);

fig_path = 'GUI_Test.fig';
savefig (hMainFig fig_path);

Florian Kroetz

达尼

David,如果能得到更新就太好了(而不是依赖png)。我必须使用uix的原因。TabGroup确实是,因为我需要禁用标签。

亚当

大卫·桑普森

丹妮,我一直在重做uix。TabGroup使用真正的uitabs,用黑客模拟禁用。我想摆脱png和把它们缝合在一起的代码。然而,我不打算把它备份到GLT 1.x。

作为对所有人的提醒,请使用uitab和uitabgroup,除非你需要禁用选项卡,或正在编写需要在R2014b之前运行的代码。

大卫·桑普森

伊恩,谢谢你的反馈。许多国家现在要求这种支持。万博1manbetx我一直在看这个。

达尼

我更喜欢Matlab中标准uitab的矩形外观,而不是这里使用的卷曲版本。如果有一个选择,选择一个或另一个外观就好了。我知道我可以修改参考资料中的png,但我仍然缺少顶部的水平线。

yijiawanjia

伊恩

有任何计划更新这个处理uifigure和朋友(或发布一个单独的工具箱)?我认为新的GUI系统有几个优点,但是如果没有这样一个工具箱的帮助,编程使用仍然是乏味的!!

谢谢大卫和本这么好的工具箱!

雷米Billoire

哈拉尔德我们

雷米Billoire

大卫,
这确实是问题所在。我下载了V2,现在它完美地工作了。
非常感谢!

大卫·桑普森

Remy,有两个版本的GUI布局工具箱:
*版本1。x,在//www.tianjin-qmedu.com/matlabcentral/fileexchange/27758-gui-layout-toolbox,适用于MATLAB R2014a及更早版本
*版本2。x,在//www.tianjin-qmedu.com/matlabcentral/fileexchange/47982-gui-layout-toolbox,用于MATLAB R2014b及以后版本

你的错误表明你使用的是1。使用R2014b或更高版本。确认:
* >> ver matlab将报告matlab版本
* >> ver layout将报告GUI布局工具箱版本

雷米Billoire

你好大卫,

我刚刚下载了你的工具箱,看起来很有用,但是每次我尝试一个函数,uiextras。vbox ()我得到以下问题:没有构造函数句柄。找到匹配签名的监听器'。

你知道问题可能来自哪里吗?

谢谢,

我肯定错过了,谢谢你这么快的反应

弗洛里安,听起来你的传说有点问题。你的坐标轴是否像GUI布局工具箱文档2.3节“颜色条和图例”那样,在uicontainer中带有图例?

Ian, uix支持对接和解对接。万博1manbetxBoxPanel而不是uix.TabPanel。你是否在寻找一些沿着我们在MATLAB桌面提供的图形对接的路线。我知道我们正在考虑在这方面提供一些东西。

伟大的工具!

还有人在使用'DisplayName'在一个情节然后传奇('-DynamicLegend')有问题吗?

伊恩•菲利普斯

优秀的工具箱。
大卫,我想停靠/取消停靠不同的标签,其中每个标签包含一个情节。
我试着编辑“dockexample”。但是我遇到了错误“Panel类上没有DockFcn属性。”
这可能吗?有解决办法吗?

大卫·马克斯

很好!

LSalvation

林严

大卫·桑普森

干得好,穆罕默德。看起来CData NaN(1,1,3)将复选框设置为单个透明像素。在左侧边缘有少量的填充,但这很好。

https://undocumentedmatlab.com/blog/transparency-in-uicontrols

泰勒Cumby

Mohammad的跨平台验证:我在Linux、MATLAB 2017b和Windows 10、MATLAB 2018b预发行版上发现了相同的结果。

穆罕默德民兵

大卫,我有个建议可以帮助解决盒子面板标题的问题。据我所知,您正在使用复选框为框面板标题和停靠/最小化工具,您试图偏移位置基于MATLAB的版本和操作系统,这样复选框图标是隐藏的。我只是遇到了一个解决方案来隐藏复选框而不抵消。我不知道你是否知道,所以我想分享一下。这可以通过将复选框的'CData'属性设置为NaN(1,1,3)来实现。我刚刚尝试了以下代码在Mac和Windows 10, MATLAB 2017b和结果是相同的(https://image.ibb.co/mA5qZo/david.png).

图;
uicontrol('样式','复选框','位置',[10 10 50 15],'字符串','ABC','背景','c');
uicontrol(“风格”,“复选框”、“位置”,[10 30 50 15],“字符串”,“ABC”,“背景”,“c”,CData,南(1,1,3));

我不是鱼

李甘甘凤头鹦鹉

Seb的偏见

穆罕默德民兵

我试过你之前建议的了。它并没有使省略号消失,只是将其向前移动了添加到标题字符串末尾的尾随空格的数量。因此,如果标题最初是“Sample”,打印为“Sam…”,添加5个空格将使其打印为“Sample…”

大卫·桑普森

Mohammad,作为另一种选择,你能检查一下恢复到原来的页边距并在标题后面添加一个空格是否有效吗?不幸的是,看起来您已经确定了屏幕上和打印上的行为不同的情况。

穆罕默德民兵

谢谢大卫。我把边距改成22来解决这个问题。当它被设置为20时,屏幕上的一切看起来都很好,只有在保存图形时省略号才会显示出来(我尝试了png和pdf格式)。在将其更改为22后,这不再发生,但标签太接近边缘,所以我通过添加一个空格到我的boxpanel标题字符串的开始ismac if语句来修复它。

大卫·桑普森

Michele,这是一个关于管理依赖性的好问题。就我个人而言,我不赞成将GUI布局工具箱与应用程序捆绑在一起。如果每个人都这样做,那么最后安装的工具箱将获胜,并且很难判断哪个版本正在运行。相反,我建议您在代码中检查GUI Layout Toolbox,如果用户没有它,则帮助用户获得它。

检查:
V = ver('layout')

检索:
网络('//www.tianjin-qmedu.com/matlabcentral/fileexchange/47982-gui-layout-toolbox”)
提交本身的url的形式
//www.tianjin-qmedu.com/matlabcentral/mlc-downloads/downloads/submissions/47982/versions/12/download/mltbx
但是没有办法询问最新版本的号码是什么。

在MathWorks中,我们一直在讨论向MATLAB中添加依赖感知的工具箱管理特性,并且我们一直在与大公司合作实现内部工具箱存储。

大卫·桑普森

穆罕默德,这太烦人了。标题呈现为一个复选框,以便可以单击它,但我需要偏移它,以便只有字符串可见。所需的偏移量是一个魔术数字,随着平台和MATLAB版本的不同而不同。如果偏移量是错误的,那么标签就没有足够的空间,你会看到一个省略号。偏移量在uix.Text中的辅助函数checkBoxLabelOffset中指定。你应该看到Mac的数字是20。你可以试一下,看看不同的数字是否更适合你吗?我不容易接触到Mac电脑。

穆罕默德民兵

谢谢你的支持和快速反馈,大卫。万博1manbetx实际上,几天前,我用你的个人资料上的联系按钮给你发送了一条私人信息,关于我与你分享的问题,但我不确定它是否曾经到达你那里。我使用的是您的工具箱版本2.3.2和最新版本Mac OSX上的MATLAB R2017b。这将是伟大的,如果你有任何解决方案的盒子面板标题问题。

米歇尔·奥罗·诺比利

嗨,大卫,我已经创建了一个工具箱使用GUI布局工具箱的GUI (//www.tianjin-qmedu.com/matlabcentral/fileexchange/67508-kview-interface-for-signal-data-easy-visualization-and-processing
在整理我的工具箱时,我陷入了一个两难的境地:根据你的情况来整理我的工具箱的最佳做法应该是什么?
一个明显的解决方案是在我的工具箱中插入+uiextras文件夹。但如果有人已经安装了您的工具箱,那么他将具有重复的功能。这很烦人。
我还试图把+额外的地方到一个私人子文件夹,但这并不与+文件夹工作。
另一个想法是把你的.mltbx打包到我的工具箱里(我必须把它拉上拉链,否则它不会被打包);然后,如果在GUI启动时没有检测到工具箱,则会弹出一个错误对话框,提供自动安装工具箱的可能性。
目前,我所做的只是检查您的收费箱是否安装,如果没有抛出一个错误,我给这个页面的链接来下载它。这可能是完美的,如果我可以发送用户到插件浏览器的右页,这将使过程非常友好。

你有什么特别的建议吗?

大卫·桑普森

Blanca, GUI布局工具箱支持编程工作流。万博1manbetx它不是GUIDE附加组件。请查看文档来了解GUI布局工具箱是如何工作的,以及它是否会帮助您提高工作效率。

布兰卡Larraga

你好,我已经下载并安装了这个工具箱。我没有看到GUIDE界面有任何变化,没有新功能出现。我怎么解决这个问题?
谢谢!

大卫·桑普森

Mohammad,漂亮的GUI。MacOS上有一个框面板标题被截断的问题,但我以为在上周发布的2.3.2版本中已经修复了这个问题。如果您有最新版本,但仍然遇到问题,请通过“联系作者”按钮联系我,我们可以研究它。

穆罕默德民兵

你好大卫,
感谢这个完美的工具箱,它使我的生活使GUI更容易。我对BoxPanels只有一个问题。当将GUI打印为pdf时,框面板的标题无法正确显示,最后几个字母被随机截断。看一下下图(上面是我在屏幕上看到的,下面是保存为pdf格式的)
https://ibb.co/i7F5fo

附言:我在Mac OS上使用MATLAB,这里是我的部分代码

GUI。BottomContainer = ui . hbox ('Parent',GUI.MainContainer,'BackgroundColor','w','Spacing',5,'Tag','BottomContainer');
GUI。ExportPanel = uix.BoxPanel('Parent',GUI。BottomContainer,'Title','Export Settings', 'BackgroundColor','w','FontWeight','bold');
GUI。FCWPanel = uix.BoxPanel('Parent',GUI。BottomContainer,'Title','3D Figure Control Widget (FCW)','BackgroundColor','w','FontWeight','bold');
GUI。SimulationPanel = uix.BoxPanel('Parent',GUI。BottomContainer,'Title','Dynamic Simulation Settings', 'BackgroundColor','w','FontWeight','bold');
GUI。ResultsPanel = uix.BoxPanel('Parent',GUI。BottomContainer,'Title','Results & State Variables', 'BackgroundColor','w','FontWeight','bold');
GUI.BottomContainer.Widths = [-1 -4 -5 -15];
GUI.BottomContainer.MinimumWidths = [100 375 00];

卡齐Nuhman

米歇尔·奥罗·诺比利

你好大卫,
你可以为那些对应用程序的GUI布局工具箱(uifigure)感兴趣的人增加一个。
我正在探索移植一些图形用户界面的可能性。

大卫·桑普森

卡斯滕,当我说面板时,我指的是GLT容器,它可以放在另一个GLT容器中。

卡斯滕•里德尔

我知道,我可以用你建议的方式来做,但我必须手动处理大小、位置和调整大小等。GLT是如此的好,因为它为你做了所有这些事情!

但是非常感谢你的评论-我将“手动”编码它。

大卫·桑普森

Carsten,你的问题并不是针对GUI布局工具箱。您需要创建一个弹出菜单和一个列表框,并用弹出菜单回调设置列表框字符串。此外,由于弹出菜单和列表框是一起出现的,您可以将它们放在一个面板中,并创建一个自定义类来表示该组件。

卡斯滕•里德尔

你好,

谢谢你这么好的工具箱!

我的结构是这样的:

LevelTypes = {'Level 1','Level 2','Level 3'}
txt{1} = {'L1 - a','L1 - b','L1 - c','L1 - d'};
txt{2} = {'L2 - 1','L1 - 2'};
txt{3} ={“L3 -我”,“L1 - ii”,“L1 - ii”,“L1 - iii”,“L1 - iv”,“L1 - v”、“L1 - vi”};

图=图;
Vbox = uix。VBoxFlex('Parent',fig, 'Tag', 'vbox');

创建一些面板(每个LevelTypes一个),每个面板都有一个列表框。。
使用面板标题来显示列表框所关注的“项目”(LevelType)
N = numel(LevelTypes);
for lno = 1:N
panel_Listbox(lno) = uix。面板('Parent', vbox, 'Padding', 5, 'BorderType','none', 'Tag', ['panel_Listbox',int2str(lno)], 'Title', LevelTypes{lno});
uicontrol('Parent', panel_Listbox(lno), 'Style', 'listbox', 'String',txt{lno});
结束

现在我的问题是:

我希望标题(即“项目”)是一个弹出式菜单,而不是只是一个不活跃的标题。用户在弹出菜单中的选择将决定相应列表框的内容。

这是可能的吗?我怎样才能做到这一点?

亲切的问候
Carsten

大卫·桑普森

GUI布局工具箱2.3.2版本现已可用。亮点:
*配置框面板工具提示
*带有可拖动分隔符的容器默认间距为非零
*在滚动面板中使用可变大小的内容
*修正了Mac上显示框面板标题的错误

大卫·桑普森

克里斯蒂安,谢谢你澄清。实际上,您希望子情节类行为与glt风格的布局相结合。我会考虑是否能让这变得更简单,尽管由于副情节的实现方式存在一些技术障碍。

基督教小丘

David -谢谢你制作GLT!谢谢你的建议。
回答你的问题…我想也许我所追求的“不同”是,我不希望每个轴-对象都占据尽可能多的空间,因为我希望轴是垂直排列的。我正在构建一个界面,允许查看和滚动从设备的记录,同时记录多个信号。我将这些信号显示在许多轴-对象上,每个BoxPanel有一个轴-对象,垂直分布在GUI中。我想要坐标轴对象的精确对齐,所以信号按照显示的时间排列。
如果我允许每个坐标轴对象单独填充BoxPanel(或uicontainer),我将得不到对齐,因为每个装饰可能会占用不同的空间。这就是为什么我想在BoxPanels中专门设置位置,以便坐标轴对象在GUI中垂直排列。

无论如何,如前所述,问题已经解决了。我尝试了uicontainers,但到目前为止,它们似乎不是必须的。我会把你的忠告记在心里,如果我发现有不良行为,就加上去。谢谢!

大卫·桑普森

克里斯蒂安,还有一些评论,还有一个问题。所有的GLT容器都列出了它们的内容。如果你在BoxPanel中有坐标轴,它们会填充它,并在BoxPanel调整大小时调整大小。你不应该直接设置GLT子容器的Position,因为你可以期望容器在调整大小时改变这些位置。

坐标轴装饰是否被剪切将取决于坐标轴的ActivePositionProperty—“position”只显示坐标轴,“outposition”也显示装饰。在文档中有更多关于这方面的信息。通常你会想要坐标轴填充BoxPanel,并可能添加一些填充,所以我想知道你需要什么是不同的。

SizeChangedFcn属性来源于GLT容器是uicontainer的子类这一事实。我不建议用自定义代码将内容重新定位到GLT容器SizeChangedFcn中,因为这是容器本身所提供的。相反,正如Robyn所建议的,将一个普通的uicontainer放到BoxPanel中,并钩子到uicontainer SizeChangedFcn中。

基督教小丘

罗宾-谢谢你的反馈!BoxPanel实际上有一个SizeChangedFcn回调属性。它只是没有在文档中明确列出,尽管它声明“可用的属性与内置的UIPANEL对象基本相同。”
问题解决了。

罗宾杜松子酒

Christian -你可以将坐标轴放在uicontainer中,uicontainer放在BoxPanel中。然后在uicontainer上使用SizeChangedFcn来完成您想要的操作。

基督教小丘

优秀的工具箱!谢谢你!
当分隔符被拖动时,为Flex方框提供一个回调函数将是非常棒的。在VBoxFlex内部,我有一些BoxPanels,每个BoxPanels都有一个指定的位置和大小的轴。但如果我拖动一个分隔符,坐标轴就会突然填满所有的BoxPanel,裁剪标记标签。分割器上的一个回调函数可以帮助把事情重新整理好。(坐标轴突然占用整个BoxPanel空间的问题,也会发生在调整包含BoxPanel的图形窗口的大小时-然而,在这种情况下,它可以通过图形调整回调修复。)
使用R2017b。

杨淘

伟大的工具箱!如果它支持由ufigure创建的数字,那就太好了。万博1manbetx我希望你对此有个计划。谢谢你!

大卫·桑普森

斯坦尼斯拉夫,听起来你的某个操作导致了坐标轴的非父轴和重父轴。具体的复制步骤可以直接发给我吗?谢谢!

lcy_joe

你好,
我有一个奇怪的毛病:
假设我创建了一个包含8轴对象的VBox: 1、2、……8。
如果我在其中一个坐标轴上放置一个数据点,顺序就会翻转,也就是说,它会变成8,7,…, 1 !
放置更多的数据点没有任何效果,而且坐标轴的顺序保持反转(8,7,…, 1)。

知道是什么引起的吗?

塞巴斯蒂安。

大卫·桑普森

Luc,使用日志为我提供了总体使用趋势的指示,以及用户中流行的工具箱版本、MATLAB版本和操作系统。使用日志记录是自愿的,不发送个人身份信息。

大卫·桑普森

Bowoon,我同意你的观察,带有大量HTML内容的uitables的响应速度很慢。这是一个适合的问题,而不是GUI布局工具箱的问题。我希望每个包含html的单元格都有自己的JxBrowser。

多年来,我们中的许多人都希望在uitables中有更多的格式控制。背景颜色和可编辑性是我的首要任务。现在在新的基于javascript的图形系统中有一个合适的组件,并且团队正在接受增强请求,因此请游说您本地的MathWorks应用程序工程师等。

HTML内容很好,因为它不需要定制Java代码,但它提供的功能有限。另一个选择是为自定义Java表编写MATLAB包装器。不过,这需要相当多的知识和经验。您当地的MathWorks顾问可能能够提供帮助。

大卫·桑普森

Curtis,谢谢你对基于javascript的图形的GUI布局工具箱感兴趣。请参阅我2017年11月7日的帖子。如果其他人对这个功能感兴趣,请在这里发帖。

为了控制预期,在基于Java或javascript的图形之间还没有任何兼容性层。例如,Java的uicontrol('Style','pushbutton',…)就是Javascript的uibutton(…)。

吕克·杜谢恩

你对发送到谷歌分析的数据做了什么用途?

柯蒂斯Mayberry

是否计划添加对uifigure的支持?万博1manbetx

格雷厄姆·史蒂文

mohammad reza

不是下载…知道哪里不对吗?

平路

hagege鲁本

你好,
我有一个问题与HboxFlex:
当创建一个图形用户界面的面板托管HboxFlex与两个持有人的图像,我经历了一个问题的指针图像被卡在“左”状态,“未设置”可能不工作在指针管理器?

我所做的一个快速修复是在HBoxFlex文件的updatemouspointer函数中将‘unset’替换为‘arrow’

bowoon金

约翰内斯

你好,
我有一个问题与多个轴,因为它不显示第二个。没有布局框,它可以正常工作。
这是我的代码:
F1 =图(1);
Hv = uix。VBox('Parent', f1);
hAx1 = axes('Parent', uicontainer('Parent',hv));
hAx2 = axes('Position',hAx1. x)位置,‘XAxisLocation’,‘前’,‘YAxisLocation’,‘正确的’,‘颜色’,‘没有’,‘XColor’,‘r’,‘YColor’,‘r’);

F2 =图(2);
hAx3 = axes('Parent', f2);
hAx4 = axes('Position',hAx3. x)位置,‘XAxisLocation’,‘前’,‘YAxisLocation’,‘正确的’,‘颜色’,‘没有’,‘XColor’,‘r’,‘YColor’,‘r’);

我哪里做错了?
非常感谢。

Bryant,目前还没有将GUI布局工具箱的开发转移到GitHub的计划。不过这个想法很有趣。

Sankar马哈

你好,

我试图添加一个图例到dockexample如下所示。但当我这样做的时候,情节被抹去了,我只能看到坐标轴上的传说符号。我如何绘制和添加一个传说。

请参阅下面的代码

dockexample()函数
%DOCKEXAMPLE:一个使用面板框停靠/取消停靠功能的例子

版权所有:The MathWorks Ltd

创建窗口和主布局
图=图()
Box = uix。HBox( 'Parent', fig );

uicontrol('Style', 'listbox', 'Parent', box, 'String', {'Item 1','Item 2'});

向盒子中添加三个面板。
面板{1}= uix。BoxPanel( 'Title', 'Panel 1', 'Parent', box );
面板{2}= uix。BoxPanel( 'Title', 'Panel 2', 'Parent', box );
面板{3}= uix。BoxPanel( 'Title', 'Panel 3', 'Parent', box );

%添加一些内容
uicontrol('Style', 'PushButton', 'String', 'Button 1', 'Parent', panel{1});
uicontrol('Style', 'PushButton', 'String', 'Button 2', 'Parent', panel{2});
Box1 = uix。VBox( 'Parent', panel{3} );
Box2 = uix。HBox( 'Parent', box1 );
uicontrol('Style', 'PushButton', 'String', 'Button 3', 'Parent', box1);
uicontrol('Style', 'PushButton', 'String', 'Button 4', 'Parent', box2);
uicontrol('Style', 'PushButton', 'String', 'Button 5', 'Parent', box2);

设置停靠/取消停靠回调
set(panel{1}, 'DockFcn', {@nDock, 1});
set(panel{2}, 'DockFcn', {@nDock, 2});
set(panel{3}, 'DockFcn', {@nDock, 3});

axes1 = axes('Parent', panel{1})
Theta = 0:360;
Plot (axes1,theta, sind(theta), cosd(theta))
传奇(“罪”,“因为”)

%-------------------------------------------------------------------------%
function nDock(eventSource, eventData, whichpanel) %#ok
%设置标志
面板{whichpanel}。停靠= ~panel{whichpanel}.Docked;
如果面板{whichpanel}。停靠
把它放回版面
newfig = get(panel{whichpanel}, 'Parent');
set(panel{whichpanel}, 'Parent', box);
Delete (newfig);
其他的
把它从布局中去掉
Pos = getpixelposition(panel{whichpanel});
(图)…
'Name', get(panel{whichpanel}, 'Title'),…
'NumberTitle', 'off',…
'MenuBar', 'none',…
'Toolbar', 'none',…
'CloseRequestFcn', {@nDock,哪个面板});
figpos = get(newfig, 'Position');
集(newfig,“位置”,[figpos (1:2), pos (3:4)]);
set(panel{whichpanel}, 'Parent', newfig,…
“单位”,“规范化”,…
'Position', [0 0 1 1]);
结束
% nDock

%-------------------------------------------------------------------------%
函数nCloseAll(~, ~)
用户希望关闭应用程序,所以我们需要清理

删除所有窗口,包括未停靠的窗口。我们可以通过
%依次获取每个面板的窗口并删除它。
对于ii=1:numel(面板)
如果是有效的(panel{ii}) && ~strcmpi(panel{ii}.)BeingDeleted, 'on')
Figh =祖宗(panel{ii}, 'figure');
删除(figh);
结束
结束

end % nCloseAll

主要功能

巴蒂尔L

bowoon金

亲爱的大卫:非常感谢你所做的伟大工作。

当我调整我的数字,包括html,速度非常慢。
我的代码现在在形式上类似于此;

H =图(10);
tb = ui . tabpanel ('Parent',h);
面板(1)= uix。面板( 'Parent', tb, 'Padding', 5 );
Panel (2) = uix。面板( 'Parent',tb, 'Padding', 5 );
Panel (3) = uix。面板( 'Parent',tb, 'Padding', 5 );

对于k =1:3
vbox = uix.VBox('parent',panel(k));
j = 1:2
listbox = uicontrol('style','listbox','max',100,'Parent',vbox);
Rn = rand(50,2);
因为我= 1:50
{我}= [' < html > < tr类=“4”> < td背景=“rgb(254198183)”宽度= " 30 "对齐=“中心”>“,num2str (rn(我,1)),”< / td > < td > ', num2str (rn(我,2)),”< / td > < / tr > < / html >”);
结束
集(列表框'字符串' s)
结束
结束

马库斯

大卫,非常感谢你的快速回答。将来这个工具箱会不会有一个GUI,类似于应用程序设计器或QT设计器?

抱歉,这是公司内部开发,所以不打算发表。

布赖恩特

有没有计划把这个放在GitHub上,并开始接受拉请求?

大卫·桑普森

马库斯,我计划在三月发布。抱歉有段时间没见了。GUI布局工具箱非常活跃。然而,我并没有计划任何大规模的新功能,因为大多数用例都可以通过使用各种容器组合来解决。人们有什么要求?

大卫·桑普森

布莱恩特,你描述的问题被报告为盒子面板标题的问题,我有解决办法。然而,uix。文本is undocumented... caveat emptor.

马库斯

大卫,有个小问题:
“GUI布局工具箱”的开发已经停止了还是会进一步开发?我这么问是因为我计划编写一个更复杂的GUI,但上一次更新是在13个月前。

非常感谢

布赖恩特

我注意到:uix。文本elements look poor on macOS, cutting off the text and leaving some of the checkbox visible.

大卫·桑普森

谢谢你Isaac,我们将在下一个版本中更正这些文档问题。

艾萨克·阿西莫夫

“用户指南”(2.3.1版本)中“4.3 Dock and undock”的函数“nDock”有两个小bug:
1.' IsDocked '不再是' uix.BoxPanel '的属性。它应该替换为' Docked '。
2.' set(p {whichpanel}…)'应该是' set(panel{whichpanel}) '

此外,在' dockexample '函数的开头行:
您可能需要在为它赋值之前添加' panel ={}; ',否则可能会出现错误。

非常感谢您的出色工作!

大卫·桑普森

尤里,你可能在以下网站看到过关于这个话题的讨论:
https://undocumentedmatlab.com/blog/transparent-uipanels

如果你有一个透明的uipanel,你会如何具体地使用它?(我感兴趣的是是否有其他的解决方案可以满足您的要求。)万博 尤文图斯万博1manbetx

贝尔山姆

尤里·Arenaccio-Khlebov

亲爱的大卫,
我只是在寻找一种制作透明面板的方法,以便能够管理UI面板背后的背景。我在评论里发现其他人也在找同样的东西。请让我们都高兴,并添加这样的功能到这个美丽的工具箱。谢谢

大卫·桑普森

谢里夫,这是个模糊的错误。我已经在内部问过了,但还没有任何建议。如果我得到任何信息,我会发布出来。

Sherif Beskhyroun

附加信息到我以前的帖子:我得到的错误与Matlab R2017b。用Matlab R2016b编译程序无错误

Sherif Beskhyroun

大卫·桑普森

Neelakanthu,目前,你不能在应用程序设计器中使用GUI布局工具箱。我们正在沿着GUI布局工具箱的路线,将布局管理功能与App Designer使用的基于javascript(“新”)的图形结合起来,用于交互和编程工作流。

直到那时,我也一直致力于移植GUI布局工具箱,以工作与新的图形。如果有兴趣的用户社区,那么我可以考虑提供。与基于java的图形相比,鼠标事件尚未公开,因此没有可拖动的分隔符。另外,在基于java的图形中存在的一些性能优化还没有在基于javascript的图形中实现。

Neelakanthu。卡拉

嗨,大卫·桑普森…如何在Appdesigner中使用这个工具箱。这可能吗?

Kasper Sørensen

你好,大卫-非常感谢。我希望我现在已经把信息发给你了:-)

大卫·桑普森

Kasper,我们之前有一些关于这个问题的报告,并做了一些更改来解决它。具体来说,问题出在使用Retina显示屏的Mac电脑上。我不记得是否有任何变化与MATLAB版本。

请您通过我的文件交换配置文件页面上的“联系”按钮直接与我联系,详细信息包括:操作系统、MATLAB版本、工具箱版本和显示设置。

Kasper Sørensen

效果很好。关于BoxPanel title属性的一个问题。在下面的例子中,上面的框面板标题显示为“T....”,下面的框面板标题显示为“Test…”。为什么没有显示整个标题,即使有足够的空间?
f = figure, vb = uix. vbox ('parent',f), uix. boxpanel ('parent', vb,'title','Test'),BoxPanel(“父”,vb,“标题”,“测试Bla”)

塞巴斯蒂安。

伟大的工作!谢谢!

大卫·桑普森

Matt,你的坐标轴是否像GUI布局工具箱文档2.3节“颜色条和图例”那样,在uicontainer中带有图例?

马特

我喜欢这个工具箱。有人在使用这个时在斧头上放一个图例有问题吗?我得到-

警告:更新图例错误。

尝试在更新遍历期间修改树
当向图形界面外的图形内的轴添加图例时,我不会得到这个错误。

felinsinap

felinsinap

菲利普Dehnen

那绝对是一个不错的工具箱。有可能实现一个解决方案,'Padding'属性也可以允许一个大小为1x4的向量使用它像[左上右下],如果填充是标量,所有的值在向量将等于该值?

菲利普Dehnen

大卫泰勒

谢谢大卫,我感谢你对这个工具箱的持续支持。万博1manbetx你的建议是我尝试的版本之一,但最终我还是为我的uix的每个元素分配了一个uicontainer。网格对象,然后为每个uicontainer分配坐标轴。(我相信这是一些评论下的建议)。我想继续使用ui。网格物体as it offers a lot in terms of layout and expansion (i.e. if there are suddenly 10 quantities to plot instead of 6) and I really want to maximise the size of the data on the screen which can be a bit fiddly with subplots . (Hence why I looked into "subplotplus"). My code is now similar in form to this:

X = 0:0.1:10;%一些数据

F =图();%初始化图
G = uix。网格('Parent', f); % create uix.Grid object
U = gobjects(1,6);为uicontainers预分配变量
对于iG = 1:6 %循环数量,并为每个数量创建一个轴
u(iG) = uicontainer('parent', g, 'Units', 'normalized', 'Position', [0 0 1 1]);
轴(u (iG))
plot(x, sin(iG.*x)) %绘图数据
传奇(sprintf('y = sin(%ix)', iG)) %添加传奇
结束
集(g,“宽度”,[1 1 1],“高度”,[1]);% set uix。网格formatting

克利斯朵夫

大卫,谢谢你的回复。我在VBoxFlex对象中有两个箱线图。在其中一个箱线图上,我有一个轴,我想检测分割器移动的时间,因为我想根据箱线图的高度改变轴的限制(XLim和YLim)。

亚尼克Ducret

你好大卫,

关于分隔器的话题,我也希望有一个“分隔器移动”的活动。这样做的目的是在用户移动分隔符后记住它们的位置,这样GUI就可以以相同的布局重新打开。为了做到这一点,此刻我等待对象被删除(Gui被关闭),并在这一点上保存宽度/高度。

大卫·桑普森

Chris,对于简单的情况,你可以在一个标准的uipanel中使用subplot,然后,把那个面板放在GUI布局工具箱容器中。例如:

F =图();
B = uix。HBoxFlex( 'Parent', f, 'Padding', 10, 'Spacing', 10 );
p = uipanel(“父”,b,“标题”,“我的小组”,…
“单位”、“规范化”、“位置”,[0.1 0.1 0.8 0.8]);
X = 0:0.1:10;%一些数据
a11 = subplot(2,2,1, 'Parent', p);
Plot (a11, x, sin(x), 'b-')
传说(a11,“蓝色”)
a12 = subplot(2,2,2, 'Parent', p);
图(a12, x, cos(x), 'r——')
title(a12, 'No legend') %除了title
a21 = subplot(2,2,4, 'Parent', p);
山峰();
legend(a21, 'peaks', 'Location', 'northeast')
a22 = subplot(2,2,3, 'Parent', p);
图(a22, x, tan(x), 'g-。”)
图例(a22,“绿色”)
c = uicontrol('Parent', b, 'FontSize', 50, 'String', 'Push!”);
b.宽度(2)= 300;

如果满足你的需要,请告诉我。

大卫·桑普森

Christophe,没有回调鼠标在分隔线上,分隔线移动,分隔线移动。这将有助于理解您想要做的具体事情,以及它是否在修改或增强当前的行为。

克利斯朵夫

大卫,很棒的工具箱。我已经使用工具箱有一段时间了,我想知道是否有一个回调函数的分割器?我想在用户单击分割器时运行一个函数。如果没有回调函数,我如何知道指针是否在分隔符的顶部?

大卫,谢谢你出色的文件提交。这个软件包是您的一位顾问Philip Rottier向我推荐的,我必须说它非常容易使用,并且有很好的文档记录。

我的一个顾虑是在某些uix对象的坐标轴上添加图例的困难。目前,我正在尝试使用uix创建一个2x3的轴网格。网格物体and would like to assign a legend to each axes, however, when I do this I end up with 12 objects in total (6 axes and 6 legends).

在分配6个ui时,我取得了一些有限的成功。uix的面板。网格物体and then embedding the axes and legend inside a uix.HBox/uix.VBox but the formatting is not as clean as a simple MatLab axes/plot/legend sequence. My current fix is to use another FEX function "subplotplus.m" to generate my grid of subplots and assign these to a normal uitab object. Not as pretty but it will do for the meantime.

你提到的一个类似于uiaxes组件的新对象听起来很理想,而且真的会对一个已经非常优秀的工具箱锦上添花。我期待着这一功能的添加。

大卫·桑普森

Eugen, GUI Layout Toolbox的编程模型是通过父容器的属性指定内容的大小。您能否提供更多信息,说明您想如何指定内容的大小,以及您希望如何在父文件调整大小时更改内容的位置,以便我们可以就如何使用GUI布局工具箱实现(或不实现)提供建议?

大卫·桑普森

Drew,在支持将图例作为GLT容器的直接万博1manbetx子对象的轴方面没有进展。出于布局的目的,您确实需要包含坐标轴和容器的东西。

在过去的一周,我一直在看如何让GUI布局工具箱与支持应用程序设计器的web图形系统一起工作。这里有一个新组件uiaxes,它包含了坐标轴及其相关项(例如,legend)。

尤金齐默尔曼

你好大卫,
伟大的工作。我试图在我写的一个gui中实现这一点,目前它有点令人沮丧。到目前为止,我一直在手动放置所有东西,并创建一种GUI对象,它们被打包到一个面板中。这些“对象”的大小应该是固定的,我不想有一个缩放,但它将伟大的安排这些面板自动,这样我就不必担心在图中的确切位置了。是否可以将固定大小的面板包含到HBox或Grid中,而不使用宽度和高度属性?
谢谢,
尤金

DrewVam55

你好大卫,

现在我已经在一些不同的gui中使用了它,并且非常喜欢它。你有没有想到一个解决方案,uicontainer需要适当的传奇行为?
我需要一个GUI的图例,但uicontainer和相关的轴/图例似乎在我的VBox中调整了糟糕的大小,被切断在顶部后的数字缩小了相当大,而不是调整轴的大小。我已经尝试使uicontainers的直接子我的VBox以及包装他们在一个面板或盒子。此外,我的ItemHitFcn (clickToggleVisibility)为我的图例在这些uicontainers似乎不工作在GUI布局工具箱,但我不确定这是否是一个GUI布局工具箱的问题。

谢谢,
安德鲁

大卫·桑普森

Martin,我相信在R2014b之前,可以将uipanel的BackgroundColor设置为“none”。例如,参见http://undocumentedmatlab.com/blog/transparent-uipanels.然而,从R2014b开始,情况就不再是这样了。我将捕获它作为一个增强请求。

马丁Kabelka

大卫

很棒的工具箱,我已经使用它好几年了(包括pre 14b版本)。

我非常喜欢用HBoxes, VBoxes等控制布局,但现在我想把一个图像作为整个GUI的背景。不幸的是,我似乎找不到使Hboxes / Panels透明的方法,这样背景中的图像是可见的。我知道如何使uicontrol和文本标签透明(感谢Yair的undocumentedmatlab.com博客),但我正在努力使uipanel透明。你能想到一种方法,如何有一个GUI与背景图像,同时利用你的伟大工具箱?

大卫·桑普森

Alain,关于uitab和uix。TabPanel,please see my reply to Tim dated 14 April 2017.

滚动面板滑块的位置由属性verticaloffset和horizontaloffset控制。

Christoph Heisen

非常好的工具箱。到目前为止,已经使用了2.2版本并扩展了ui。TabPanelso that the BackgroundColor is applied to the dividers UIControl too:

指数:TabPanel.m
===================================================================
——TabPanel。M(修订336)
+ + + TabPanel。M(工作副本)
@@ -79,7 +79,8 @@

%创建分隔符
分割器= matlab.ui.control。UIControl('Internal', true,…
——“父”,obj,“单位”,“像素”、“风格”,“复选框”);
+“父”,obj,“单位”,“像素”、“风格”,“复选框”,…
+ 'BackgroundColor', obj.BackgroundColor);

%创建监听器
backgroundColorListener =事件。Proplistener (obj,…
@@ -795,6 +796,9 @@

函数(obj, ~, ~)

+ %传播到分隔符UI元素
+ (obj。分频器s, 'BackgroundColor', obj.BackgroundColor)
+
%标记为脏
obj。脏=真;

阿兰Barraud

嗨,大卫
神奇的工具箱! !然而,有些问题。
使用uix。BoxPanel( ) same remark as Team. It would be nice to have the solution within this toolbox without refering to uitab.
使用uix。ScrollingPanel()如何正确设置滑块的初始位置(可能隐藏属性)
我可能遗漏了一些关于uix的内容。ScrollingPaneltrying to scroll many axes with some fixed number visible at the same time on screen. See the following m file. Best regards. Alain
函数TestUIEXTRA(国旗)
if nargin==0, Flag=1;结束
关闭所有
f = figure('Name', 'Scrolling数轴',' unit','norm','outerposition', [0 0 1 1]);
P = uix。ScrollingPanel('Parent', f);
hh = uipanel(“父”,p);
hhpos = getpixelposition (hh); W = hhpos (3); H = hhpos (4), y = 0;
我想要3个轴同时可见(在屏幕上)
N =8;%总轴数
ax = gobject (n, 1);
%第一次分别
如果国旗
k = 1: n
ax =轴(“父”,hh,“单位”,“像素”,“outerposition”,[0 y W H / ns]), y = y + H / ns;
标题(num2str (k))
结束
结束
set(p, ' width ', .98*W, ' height ', n*H/ns, ' horizontaloffset ', 0, ' verticaloffset ', 0)
%秒可能性轴在p设置之后设置
如果国旗~ = 1
k = 1: n
ax (k) =轴(hh“父”,“单位”,“像素”,“outerposition”,[0.025 * * W H / W y .95 ns]), y = y + H / ns;
标题(num2str (k))
结束
结束
无论如何,结果都很奇怪,但又不同。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

布莱希特

亚尼克Ducret

确认David,没有GUI布局的问题仍然存在:
Fh =图;
uipanel('Parent', fh, 'Position', [0 0 0.5 1], 'Title', 'Control');
uipanel('Parent', fh, 'Position', [0.5 0 0.5 1], 'Title', 'Depth');

Dani, Yannick,这听起来不像是GUI布局工具箱本身的问题。你能确认你是否看到两个uipanel并排在一起的相同效果:
Fh =图;
uipanel('Parent', h_hbox, 'Position', [0 0 0.5 1], 'Title', 'Control');
uipanel('Parent', h_hbox, 'Position', [0.5 0 0.5 1], 'Title', 'Depth');

达尼

谢谢亚尼克。的工作原理。

亚尼克Ducret

丹妮,我也有同样的问题。我现在使用'FontName', 'Arial'为我所有的GUI。

达尼

如果我运行下面的代码,那么(顶部)线周围的面板没有正确对齐。如果我将第二个面板的标题改为“CDepth”,那么它们就与标题文本相关。有办法解决这个问题吗?

Fh =图;
H_hbox = uix。HBox('Parent', fh);
uix。Panel('Parent', h_hbox, 'Title', 'Control');
uix。Panel('Parent', h_hbox, 'Title', 'Depth');

吉安卡洛

阿里kermani

克里希纳moparthi

伊莱亚斯Fulthorp

Leul Belayneh

类“uiextras”没有定义。
也许Java没有运行。

运行MATLAB代码时会弹出此文本。如何解决这个问题?

lv

大卫·桑普森

Josh,请参见GUI布局工具箱文档的第6节“使用MATLAB编译器部署GUI”。

大卫·桑普森

格热戈兹,你可以,只要你遵守
1.MathWorks, Inc.软件许可协议(参见Help >使用条款)
2.GUI布局工具箱许可(参见上面的“查看许可”链接)

有关File Exchange提交许可的更多背景信息,请参阅:
//www.tianjin-qmedu.com/matlabcentral/FX_transition_faq.html

Grzegorz Knor

我可以在商业应用程序中使用GUI布局工具箱吗?计划将其作为独立的可执行文件部署。

杰克·斯宾塞

你好大卫,

我使用R2016b版本2.3.1的GUI布局工具箱。是否有一个工作周围使GUI布局工具箱与MATLAB编译器一起工作?

谢谢,
杰克

杰克·斯宾塞

我使用R2016b版本2.3.1的GUI布局工具箱。

大卫·桑普森

蒂姆,如果你不需要禁用标签的功能,那么你应该使用uitab,它是在R2014b中添加到MATLAB的。这提供了一个小滑块滚动,如果选项卡标题很长。

如果你确实需要禁用*和*长的标签标题,然后让我知道,我可以游说进一步有禁用添加到MATLAB。

Grzegorz Knor

非常直观。

蒂姆Spaeder

你好大卫,
首先,这是一个神奇的工具,非常适合你。

我有一个关于TabPanel的处理问题。我有一个创建了很多标签的GUI。休耕MWE说明了这一点:

h.mainWindow = figure('Name','Testfigure');
保存所有内容的mainContainer
h.mainContainer = uiextras.VBox('Parent',h.mainWindow);
用于各种页面的%tabPanel
h.TabBar = uiextras.TabPanel(…
“父”,h.mainContainer,…
' TabSize ', 1);
%创建多个选项卡
因为我= 1:20
pageHandle = sprintf('Page%1.0f',i);
h.(pageHandle) = uicontrol(…
“父”,h.TabBar,…
“风格”,“文本”,…
'String',['Content of ',pageHandle]);
结束

很明显,每个选项卡的“TabName”都被缩短了,因此无法阅读。有办法解决这个问题吗?我想能够阅读完整的“TabName”,但我真的不关心格式。

-我想知道我是否可以让TabPanel本身可滚动,并设置每个Tab的TabSize为80分。
-或者,我想改变TabBar的高度,这样“TabName”可以跨越两行
-另一种选择可能是只设置在TabBar中可见的特定数量的选项卡,这取决于哪个选项卡是活动的,并在另一个选项卡被选中时更改可见性

你能给这个问题一个建议吗?

“国丰

伟大的工具箱!喜欢它!这使得在Matlab中编写GUI更加高效。使用Javacomponent可以开发非常好的GUI。虽然App Designer提供了现代的GUI设计,看起来很酷,但它的功能目前仍然有限,因为它开始使用新的uifig图,这与图形组件不兼容。所以目前,我将在Matlab中使用布局工具箱来设计GUI。
一个问题是,如果GUI中有相当多的组件,启动速度可能会很慢。正如其他用户所讨论的,这是由多次调用重绘函数引起的。希望这个问题能尽快解决。

亚尼克Ducret

你好大卫,

调用activeX控件的“move”方法与它的uix父控件的“SizeChangedFcn”是完美的。

唯一的麻烦是找到父ui容器wrt的相对位置。图。最后我把所有的祖先级联起来,把它们的位置加起来,直到我找到那个数字。

大卫·巴里

+1票的能力禁用重绘,直到所有的子元素都被添加。这将是非常有用的GUI我目前写的地方,我在循环中创建元素,它是浪费时间重绘,直到我已经完成循环。

大卫·桑普森

鲍里斯,看我2016年2月25日的帖子。请使用contents属性而不是Children属性对内容进行重新排序。

BorisPas

你好,

我目前正在用这个非常有用的工具箱构建一个Gui。
我有一个关于插入盒子的问题。
我想在其他已经包含的之间的特定位置插入一个框。到目前为止,我通过添加一个新框并随后更改Array中的顺序来实现这一点。

例如:盒子。儿童([1 2])=盒子。儿童(2 [1]);

这种方式如我所愿,但它需要相当长的时间,特别是当我得到更多的场。就我而言,插入一个这样的盒子可能要花上几秒钟。

是否有更好的方法将Boxes插入到堆栈的特定位置?

亲切的问候
鲍里斯

BorisPas

Cortexlab

谢谢大卫。除了用户可访问的“RedrawMode”标志之外,可能还有一种方法是提供一个函数来填充ui的每个元素。带有某种类型的对象(如uicontrol或uix.Box)的网格。这个函数可以负责禁用/启用RedrawMode本身。由于更改uicontrol的字符串和样式相对非常快,这至少可以解决我的特殊情况下的问题,尽管可能不像用户可访问的版本那样普遍。无论如何,如果你想到了什么,请告诉我!谢谢。

大卫·桑普森

Nick,谢谢你的基准测试代码。查看我2016年2月23日关于暂时禁用重绘的评论。我认为这可以使你的案子加快40%。我们来看看。

Chandrama衬衣

Cortexlab

嗨-谢谢你做了一个非常棒的工具箱!创建复杂的gui是如此简单,令人惊讶。

但是,我们的性能出现了问题。我们的gui包含一个ui。网格with about 100 uicontrols in it. It takes about 3 sec to create this grid, which isn't good enough because we have to re-create versions of it frequently when users interact with the gui. From profview it looks like the vast majority of this time is in "addChild" and especially in the "setPosition" commands that it ends up calling over 5000 times (presumably re-drawing everything each time a single child is added). Do you have any suggestions for how I can improve the speed? Below is a sort of minimal example that takes nearly as much time as our entire GUI. Thanks!

尼克

抽搐;
F =图;
G = uix。网格('Parent', f);
nR = 33;
对于r = 1:nR
uicontrol(“父”,g,“风格”,“文本”,“弦”,sprintf (text_ % d, r));
uicontrol('Parent', g, 'Style', ' button', 'String', sprintf('btn1_%d',r));
uicontrol('Parent', g, 'Style', ' button', 'String', sprintf('btn2_%d',r));
结束
Toc % 2.5秒到这里

Ch = allchild(g);
chReorder =重整(重整(ch(end:-1:1), 3, nR)', nR*3,1);
g.Contents = chReorder;

g. width = [100, 100, 100];
g.Spacing = 1;
g.高度= 25*个位(1,nR);

Toc % 2.55秒到这里

默罕默德Awais

如何在matlab中安装这个工具箱

大卫·桑普森

Yannick,不幸的是,Active-X控件的位置控万博1manbetx制支持很差。您可以在创建点设置相对于父图形的像素位置,但不能设置其他位置。万博1manbetx对Java组件的支持更好。

我看了看如何将Active-X控件的位置与另一个组件同步,然后放弃了。存在许多成分——getpixelposition、SizeChanged和LocationChanged事件、move方法——但保持控件在顶部、强制重绘和处理像素缩放等问题仍然存在。

这是MATLAB的一个限制,而不是GUI布局工具箱。

大卫·桑普森

João,请参阅我在2017年2月13日的评论:“我们不提供指定跨越的方法…”

米甲葛

真的很酷。它很有效(到目前为止我还没有遇到任何问题)。不用被迫手动做这些布局是非常有用的。非常感谢:)

若昂铁

嗨,大卫,有没有一种简单的方法来有效地合并uix中的单元格。网格对象(可能使用宽度和高度属性)?谢谢,若昂

亚尼克Ducret

你好所有的,

有没有人尝试过在uix组件中放置ActivX控件?

它在理论上工作,但您只能定义ActiveX控件位置wrt。图。如何在图中找到ui面板/框的确切位置?

你好,

我甚至在历史上第一次下载。mltbx文件。任何人可以帮助我请如何添加这个。mltbx文件到我的Matlab和我如何使用它。我有Matlab 2016a谢谢

简·凯勒

DrewVam55

你好大卫,

我想我只是需要继续阅读更多的帖子来找到我的解决方案……效果很好!我唯一的建议(我为自己做了这个小修改)是防止onmousewheelscroll的滚动动作,如果图形有MATLAB的本地缩放模式启用。如果你不这样做,你就会得到面板滚动和图形在光标经过时短暂放大/缩小的组合。

再次感谢,
安德鲁

大卫·桑普森

Andrew,我在1月31日的2.3.1版本中添加了你所提到的功能——边拖边滚动,带滚轮滚动。让我知道你有多喜欢它们,如果你有进一步修改的建议。

DrewVam55

你好大卫,

修改滚动面板,使其在滑动时主动移动,而不仅仅是在鼠标释放时?

我希望有一个合理的解决方案来控制它与鼠标滚轮,但从你的努力看来,这似乎不太可能。同时,在移动滚动条时更新GUI窗口对于提高可用性仍然有很大的帮助。

谢谢,
安德鲁

若昂铁

非常感谢大卫,现在开始工作了。竖起大拇指!

大卫·桑普森

Joao,这是一个网格在滚动面板的例子。在这种情况下,它是一个固定大小的网格在一个可变大小的滚动面板。

F =图;
S = uix。ScrollingPanel('Parent', f);
G = uix。网格( 'Parent', s, 'Padding', 10, 'Spacing', 10 );
for ii = 1:16, uicontrol('Parent', g, 'String', ii);结束
g.高度= [200 200 200 200];% 4固定行
高度= 850;

与此相关的是,我尝试在2.3.1版本中添加对最小大小变量的支持,但没有万博1manbetx成功。这将适用于以下情况:

g.高度= [-1 -1 -1];% 4可变行
. minimumheights = 500;高地= -1

解决这个问题在下一个版本的列表中。

大卫·桑普森

Joao,关于违约:

我建议每个类使用一个函数,它创建一个对象并将其某些属性设置为默认值,同时允许用户设置其他属性。

函数obj = myVBox(varargin)
Obj = uix。VBox( varargin{:}, 'BackgroundColor', 'w' );
结束

如果您想要一组这样的函数共享相同的属性值,那么您可以为此创建一个函数。

函数c = myBackgroundColor()
C = 'w';
结束

如果你想要一个可变的、粘性的默认值,那么你可以使用首选项。

getpref('uix', 'BackgroundColor', 'w')

若昂铁

谢谢你的回复,大卫。在我的特殊应用程序中,我希望将所有元素(HBox, VBox, Panel, Grid等)的默认背景颜色设置为白色。你能详细说明一下你建议的“工厂功能”吗?

在另一个主题上,我也在努力将ScrollingPanel与轴以外的东西一起使用,如文档中所示。滚动条显示的实际条件是什么(例如,滚动面板的位置(4)值需要小于其子)?你能提供更多的例子,例如VBox或Grid吗?

大卫·桑普森

Joao,你正在寻找像set(0,'DefaultHBoxPadding',10)这样的东西,或者如果你感觉特别现代,set(groot(),…)。

不幸的是,MATLAB图形默认系统只适用于MATLAB本身的图形类。在GUI Layout Toolbox版本1(在R2014b之前)中,我们为我们的类加入了有限的功能,但它从来没有很好地工作过,并在版本2 (R2014b之后)的大重写中被删除了。

如果您总是希望创建具有特定属性值的对象,我建议您创建一组工厂函数。首选项(如getpref和setpref)也可能发挥作用,这取决于您想要实现的目标。

若昂铁

嗨,大卫,很棒的工具箱!是否可以为uix包中的任何类设置默认属性值,例如为创建的任何VBox、HBox设置默认背景颜色?我知道这可以在根级别上为任何图形对象做,但我不确定如何在用户定义的类上做这一点。先说声谢谢。

大卫·桑普森

有关安装工具箱(.mltbx)文件的问题,可以联系MathWorks支持人员。万博1manbetxwww.tianjin-qmedu.com/万博1manbetxsupport

有几种方法可以确认工具箱是否已安装:
*启动加载项管理器
*检查matlab.addons.toolbox. installedtoolbox的输出
*如果工具箱中包含文档,启动文档浏览器,并在“补充软件”下勾选
*如果工具箱包含Contents。M,使用ver,例如ver('布局')

米一个

米一个

奥萨马阿巴斯

我有MATLAB R2015a。当我试图安装您的工具箱时,它似乎已经安装了,但我找不到它!!怎么了?

大卫·桑普森

Yoav,我们没有提供指定跨度的方法,但是如果适当地设置宽度和高度,您可以通过嵌套来实现所需的内容。

Yoav Romach

是否有可能在网格中添加一个选项,让一个物品占据多个位置?

我有一个8x5的网格,但我希望最后4个项目(底部角落)是一个单一的按钮…

目前有什么方法可以做到吗?

大卫·桑普森

Yannick, MATLAB使用的是列大序,而西方的阅读顺序是行大序。尽管你不是第一个提供这种反馈的人,但我还是不喜欢使用与MATLAB不同的默认。我们尝试了提供控制顺序的开关,也允许将Contents指定为矩阵而不是向量。在这一点上我们需要多想一想。

亚尼克Ducret

嗨,大卫,我最终超载跟踪功能只是有一致的结果加载时。在运行运行时,每一点都有帮助。不知道为什么要花这么长时间,我想可能和代理人有关。

另一方面,我总是编辑Grid类,因为我需要它一行一行地构建而不是一列一列地构建。如果能够在调用它时进行选择就好了。

大卫·桑普森

Matthew,今天发布的2.3.1版本提供了滚动面板内容的最小高度和宽度。

F =图();
S = uix。ScrollingPanel('Parent', f);
H = uix。HBox( 'Parent', s, 'Padding', 10, 'Spacing', 10 );
for ii = 1:4, uicontrol('Parent', h, 'String', ii);结束
. minimumwidths = 450;

埃里克,我还添加了滚轮滚动。

F =图();
f.位置(3:4)= 450;
Movegui (f, 'center');
P = uix。ScrollingPanel('Parent', f);
N = 30;H = 20;S = 5;
G = uix。网格( 'Parent', p, 'Padding', s, 'Spacing', s );
for ii = 1:n, uicontrol('Parent', g, 'Style', 'text', 'String', sprintf('参数#%d:', ii), '启用','非活动');结束
for ii = 1:n, uicontrol('Parent', g, 'Style', 'edit');结束
g. width = [-1 -1];
g.Heights(:) = h;
高度= n*h + (n+1)*s;

不幸的是,我发现这两个功能不能一起工作。基于滚轮的滚动目前只适用于固定大小,而不是最小变量大小。

大卫·桑普森

Matthew,我同意提供一种为可滚动面板设置最小高度和宽度的方法是有用的。这与GUI布局工具箱的当前编程模型不冲突。我已经捕获它作为一个增强请求,以包含在即将发布的版本中。谢谢你的建议。

马修角落

下午大卫,

首先,很棒的资源。我有一点玩耍与滚动面板,我想知道是否有一个解决方案以下。

假设在gui中,我有一个滚动面板作为主包装器。在其中,我有一个HBox,它具有灵活的宽度,但有一个基于其子节点的最小宽度的最小宽度。当窗口的大小被调整到小于其子窗口的最小宽度时,我如何才能强制滚动面板尊重这一点?

我期望一个minimumWidths / minimumWidths属性的滚动面板适用于子,但这些不存在。

问候,

马特

大卫·桑普森

更正我的上一条消息:我指的是WindowScrollWheel,不是WindowMouseMotion。

大卫·桑普森

埃里克,我考虑过提供车轮驱动的滚动。这需要将一个监听器连接到图形WindowMouseMotion事件。挑战在于确定指针是否在ScrollingPanel上,因为这是用户所期望的行为。

最简单的方法是检查事件数据中的HitObject是否为ScrollingPanel。然而,这依赖于用户对容器中的所有内容关闭HitTest。

另一个选项是检查HitObject是否是ScrollingPanel或它的任何子对象。调用allchild来响应指针的移动将会很慢,并且维护后代的缓存很容易出错。

计算ScrollingPanel的绝对位置,并将其与绝对指针位置进行比较,对于停靠的图形是很困难的。你还得考虑上面的东西。最后,必须缓存信息以提供良好的性能。

总之,我现在已经把它停好了,但是将来我还想再看看它。

大卫·桑普森

Yannick,我想知道为什么在你的环境中表现比我看到的要差得多。我期望小于0.1 s,通常大约0.03 s,所有这些都是对urlread的调用。

作为对他人的提醒:
1.在您第一次创建GLT对象时,每个MATLAB会话都会调用一次跟踪。
2.我试图量化使用情况,以构建开发资源的案例。

亚尼克Ducret

发现我可以节省1完整秒时,创建我的gui关闭使用跟踪:

uix.tracking(“了”)

Erik Turlejski

你好,
我想知道是否可以使用鼠标滚轮滚动通过ui . scrollingpanel ?
不确定这是否相关,但我是在Mac和唯一的方式滚动滚动面板是通过抓滑块。
谢谢!

大卫·桑普森

DrewVam55 uix。ScrollingPanel,like other GLT panels, only shows one child at a time. Which child is controlled by the property Selection.

你可以在容器(uicontainer或uipanel('Title','','BorderType','none')中放置子图,并将容器放在滚动面板中。

F =图;
S = uix。ScrollingPanel('Parent', f);
p = uipanel('Parent', s, 'BorderType', 'none');
T = -10:0.01:10;
a1 = subplot(4,1,1, 'Parent', p);
Plot (a1, t, sin(t));
a2 = subplot(4,1,2, 'Parent', p);
图(a2, t, cos(t));
a3 = subplot(4,1,3, 'Parent', p);
图(a3, t,符号(t));
a4 = subplot(4,1,4, 'Parent', p);
Plot (a4, t, t);
高度= 1000;让它比面板高

(我希望这个回答会引发一堆我没有满意答案的后续问题!)

鲍特Jacqmin

这个很棒的工具箱何时与AppDesigner兼容有什么消息吗?

非常感谢

DrewVam55

你好大卫,

是否有任何计划更新此功能与subplot() ?我一直试图想出一个好方法,将GUI与多个图形(对于一个屏幕来说太多了)和subplot和ScrollingPanel的组合结合起来将是完美的。到目前为止,我相信在执行add/remove子监听器时,subplot以某种方式被Panel的内部破坏——只有当前的轴在事件回调之后被转移,其余的子plot轴消失。

DrewVam55

大卫·桑普森

对于任何在安装方面有问题的人,这里有一些提示。

请确保下载的是工具箱,而不是zip文件。

有了.mltbx文件后,有几种安装方法。所有人都应该工作。
1.双击MATLAB外部的文件。在安装过程中,文件扩展名应该与MATLAB相关联。
2.双击MATLAB中的Current Directory视图中的文件。
3.installtoolbox (16a及以后版本)

GUI布局工具箱2。x适用于MATLAB R2104b及以后版本。

名选手Fedoniuk

我使用Matlab R2016b,不能安装这个工具箱,无论我尝试什么。

大卫·桑普森

GUI布局工具箱第一次达到了每月1000次的下载。感谢大家的关心,支持和反馈。万博1manbetx

如果您使用的是旧版本,那么请下载最新版本以获得增强和bug修复。工具箱是稳定的,我们有一个不错的测试套件,我们可以在可追溯到R2014b的MATLAB版本中持续运行,所以更新应该是没有痛苦的,只是获得。

如果您发现GUI布局工具箱有用,那么请传播这个词,并请考虑在文件交换上提交评级。

Therry

你好大卫,
这个工具非常好用!一个缺点(已经解决):将鼠标移动到一个大的图形上会减慢上下文菜单的反应时间,有时根据移动的不同会达到10秒)。在GridFlex、HBoxFlex和VBoxFlex的嵌入式函数“onMouseMotion”中加入“drawnow”后,反应时间又快了起来。你能把这篇文章写进下一期吗?

大卫·桑普森

Steve,在GLT容器中使用上下文菜单应该没有任何特别的问题。例如:

T = 0:0.1:10;%的时间
F =图();
G = uix。网格( 'Parent', f, 'Padding', 50, 'Spacing', 50 );
R = 3;C = 2;%行和列
对于ii = 1:r*c
a = axes('Parent', g, 'ActivePositionProperty', 'Position');
Plot (a, t, rand(size(t)));
结束
g.Heights = repmat(-1, [r 1]);
c = uicontextmenu('Parent', f);
uimenu('Parent', c, 'Label', 'The');
uimenu('Parent', c, 'Label', 'Math');
uimenu('Parent', c, 'Label', 'Works');
set(g.Contents, 'UIContextMenu', c)

你发布的代码无法运行。

史蒂夫Ratts

优秀的工具箱!非常好的文档,让你很容易开始使用它。

不过有一件事卡住了。我似乎不能添加uicontextmenus到plot。我已经尝试遵循Mathworks提供的通用指导,当然他们的代码可以处理普通图形,但是当我试图将其应用到我在网格的一部分的坐标轴上绘制的东西上时,我得到了一个错误消息,说在Menu类上没有Label属性。

下面是我尝试过的一个例子。在这个例子中,我创建的所有对象都在gui结构中,而gui的数据也在数据结构中。GUI中有一个2x3的坐标轴网格。轴数组。除了调用uimenu之外,一切似乎都很正常:

n = 1:6时
keyIndex = data.Index+n-1;
if keyIndex <= 256
p = plot(gui.axes(n), data.keys(keyIndex,:));
C = uicontextmenu;
. uicontextmenu = c;
m1 = uimenu(c, ' label ', 'Zoom In', 'Callback', @onZoomIn);
m2 = uimenu(c, ' label ', 'Zoom Out', 'Callback', @onZoomOut);
m3 = uimenu(c, ' label ', 'Reset', 'Callback', @onResetZoom);
ylim (gui.axes (n), ylim);
set(gui.axes(n), 'FontSize', 6);
XLim = get(gui.axes(n), 'XLim');
text(gui.axes(n), 0.02*XLim(2), 0.9*YLim(2),…
sprintf('Key Byte = %d', keyIndex-1),…
“字形大小”,6);
其他的
班(gui.axes (n))
结束
结束

史蒂夫Ratts

克利斯朵夫

David:谢谢你的例子和评论,我现在更好地理解了这个新面板的用法。

大卫·巴里

谢谢你的uix。ScrollingPanel大卫and Ben. You have just upped the MATLAB App building game once again. I do hope that your development colleagues are seriously considering this capability for App Designer.

大卫·桑普森

到目前为止,最主要的用例是在有限的垂直空间中布置一长串控件。

F =图();
f.位置(3:4)= 450;
Movegui (f, 'center');
P = uix。ScrollingPanel('Parent', f);
N = 30;H = 20;S = 5;
G = uix。网格( 'Parent', p, 'Padding', s, 'Spacing', s );
对于ii = 1:n
uicontrol('Parent', g, 'Style', 'text', 'HorizontalAlignment',…
“对”,“弦”,sprintf(参数# % d:,(二));
结束
对于ii = 1:n
uicontrol('Parent', g, 'Style', 'edit');
结束
g. width = [-1 -1];
g.Heights(:) = h;
高度= n*h + (n+1)*s;

克利斯朵夫

新的滚动面板似乎工作得很好,但我不知道我是否会使用它,因为它可能只对非常特殊的情况有帮助。如果你有一个很好的使用它的例子,我很有兴趣看到它。
无论如何,新的可能性/工具总是受欢迎的:)

大卫·桑普森

在VBox和坐标轴之间放置uicontainers似乎是有帮助的,尽管我仍将进一步了解为什么抄写层首先要删除坐标轴。

gui。ViewContainer1 = uicontainer('Parent', gui。ViewLayout);
gui。ViewAxes1 = axes('Parent', gui。ViewContainer1);
gui。ViewContainer2 = uicontainer('Parent', gui。ViewLayout);
gui。ViewAxes2 = axes('Parent', gui。ViewContainer2);

TRogers

优秀的工具箱!谢谢你大卫

我可能发现了一个小错误(下面是简化的例子)。

我有两个轴显示不同的图像。如果我单击Data Cursor,然后单击其中一个图像/轴上的点,它们就会在GUI中交换位置。进一步的点击不再交换位置。

什么好主意吗?是我的代码有问题吗?

我在Linux上使用R2016a。

----案例----
关闭所有;清除所有;
GUI = struct();

gui。窗口=图(…
“名称”,“图像查看器”,…
'NumberTitle', 'off',…
'MenuBar', 'none',…
“工具栏”,“图”,…
‘HandleVisibility’,‘了’,‘颜色’,‘w’,‘单位’,‘标准化’,‘outerposition’,(0,0,1,1));

browseLayout = uiextras。HBoxFlex('Parent', gui. html)窗口,'Spacing', 3);

gui。ViewPanel = uiextras。BoxPanel(…
'Parent', browseLayout,…
'Title', 'Image Viewer');

gui。ViewLayout = uiextras。VBox('Parent', gui。ViewPanel,……
'Padding', 3, 'Spacing', 3);

gui。ViewAxes1 = axes('Parent', gui.ViewLayout);
gui。ViewAxes2 = axes('Parent', gui.ViewLayout);
linkaxes ([gui.ViewAxes1 gui.ViewAxes2]);

I1 = ones(700,1400);
I2 = 0 (700,1400);

imshow (I1,[],‘父’,gui.ViewAxes1)
imshow (I2,[],‘父’,gui.ViewAxes2)

大卫·桑普森

2.3版本的GUI布局工具箱现在可用。请尝试新的滚动面板!

TestingMatlab

David -谢谢你的帮助,感谢你的评论,并同意你避免addlistener对抗event.listener。我试图监听注释删除事件后跟设置(gco,'Selected " off'),但没有成功。非常感谢你的解决方案。

大卫·桑普森

Amit,我不能评估你所做的是否合理,但我可以告诉你如何使一个组件不可选:在属性“Selected”上创建一个监听器,并配置监听器回调将属性值设置回“off”。

addlistener(o, findprop(o, 'Selected'), 'PostSet', @(~,e)set(e.f ectedobject,'Selected','off'))

通常我避免使用addlistener而使用event。监听器,但在本例中,原始事件的源和反应对象是相同的,所以这是可以的。

下面是一个创建多个容器的示例,其中一个容器(box panel)是不可选择的。

H = uix。HBox( 'Parent', gcf, 'Padding', 10, 'Spacing', 10 );
B = uix。BoxPanel( 'Parent', h, 'Padding', 10 );
c = uicontrol('Parent', b, 'String', 'Click me!”);
a = axes('Parent', h);
[x, y, z] = peaks();
冲浪(a, x, y, z)
addlistener(b, findprop(b, 'Selected'), 'PostSet', @(~,e)set(e.f ectedobject,'Selected','off'));

TestingMatlab

David:关于第二点的任何评论都让我很恼火。

我能否以某种方式添加一个监听器到面板下面,以便当它被选中时,它触发' selected '属性为'off'状态?

在这方面的帮助将不胜感激。

TestingMatlab

你好,大卫,谢谢你的回复。如果我没有恰当地提出我的问题,我很抱歉。

我知道GLT将在下次适当的事件中设置位置,这正是人们所期望的。

1)但我如何禁用面板得到选择,以便用户不能移动/选择他们?我正在设置“HitTest”属性,但有没有其他方法来防止用户选择面板(在第一个地方)?

2)当轴上的注释被删除时,面板(包含子轴)会自动选择。我怎样才能停止这种行为?

大卫·桑普森

Amit,可以选择GLT面板。也可以手动和临时调整它们的大小,例如,创建并显式设置Position。然而,GLT将在下一个适当的事件中设置Position,例如,祖先调整大小。

相关内容:因为GLT子尺寸实际上是由父节点拥有的,所以我们没有办法让子节点位置集受父节点类型和属性的限制。我可以建立这样的模式——父母倾听孩子的姿势,识别不是由父母发起的集合,并做出反应——但这将是一种付出巨大而收获甚微的痛苦。

TestingMatlab

你好David,除了张军查询,如你所说,2.2.2工作正常。但是删除注释(使用编辑图工具栏)会选择坐标轴的父面板。

我还发现,可以使用“EditPlot”工具栏移动和调整框面板的大小。我可以设置'HitTest'属性为'off'来停止这个。还有别的办法能阻止这一切吗?

我正在使用'HitTest'暂时禁用面板的选择(使用'EditPlot'工具栏),但父面板包含轴仍然被选中,如果任何注释被删除。我怎样才能停止这种行为?

大卫·桑普森

Christophe,文档中的默认属性请求很好。我们正在考虑重做文档,使其看起来像产品文档,但这是一项相当大的工作。

大卫·桑普森

张军,我在2.2.2版本中引入了一个更改,允许使用数据游标模式而不需要额外的uicontainer。

例如:
>> h = uix。HBox( 'Parent', gcf );
>> a = axes('Parent', h);
>>地块(a, 1:10, rand([1 10]))
打开数据游标模式并单击该行。在2.2.2中工作,在2.2.1中错误(如您报告的那样)。

如果您看到2.2.2版本的问题,那么如果您可以通过我的FX配置文件联系我,并发送复制步骤,我将不胜感激。

您可以选择上面的“观看此文件”来接收更新通知。

Zhangjun余

克里斯托弗,你说得对。非常感谢。这个问题困扰了我好几个星期。此外,我最大的收获是发现了GUI布局工具箱的User_guide。

克利斯朵夫

张军于>查看帮助文件User_guide2_3.html。我认为这和颜色和图例的问题是一样的,你必须把坐标轴放在uicontainer中。我没有自己尝试,但根据下面的评论,它应该可以工作,稍后将更新。

Zhangjun余

当我使用数据游标时,HBox中的坐标轴将在水平方向上缩小到一半大小。以下是部分错误信息:

警告:在执行事件的侦听器回调时发生错误
为类uix定义的ChildAdded。ChildObserver:
没有公共财产单位存在的阶级
matlab.graphics.shape.internal.AnnotationPane。

ui错误。HBox/redraw (line 138)
的孩子。单位= '像素';

ui .mixin. container /set错误。肮脏的(第129行)
Obj.redraw() %现在重绘

uix.mixin错误。容器/addChild (line 219)
obj。脏=真;

ui错误。HBox/addChild (line 167)
addChild@uix.Box(obj, child)

uix.mixin错误。容器/onChildAdded (line 159)
obj。addChild (eventData。孩子)

uix.mixin.Container>@(varargin)obj.onChildAdded(varargin{:})中的错误(第51行)
childdobserver, 'ChildAdded', @obj。onChildAdded);

ui错误。ChildObserver/addChild (line 109)
notify(obj, 'ChildAdded', uix。childdevent (oChild))

ui错误。ChildObserver/addChild (line 116)
obj。addChild(nChild, oGrandchildren(ii))

uix.ChildObserver>@(~,e)obj.addChild(nChild,e. child)中的错误(第96行)
@ (~, e) obj.addChild (nChild e.Child));

在matlab.graphics.shape.internal.ScribeStackManager/createLayer中出错

在matlab.graphics.shape.internal.ScribeStackManager/getLayer中出错

在matlab.graphics.shape.internal.ScribeHost>findAnnotationPane中出错

在matlab.graphics.shape.internal.ScribeHost/setPeerParent中出现错误

在matlab.graphics.shape.internal.ScribeHost中出错

在matlab.graphics.shape.internal.ScribeHost>@(s,e)nDelayedReparent()中出错
>在uix中。childdobserver /addChild(第109行)
在uix。childdobserver /addChild(第116行)
在uix.ChildObserver>@(~,e)obj.addChild(nChild,e. child)(第96行)
在matlab.graphics.shape.internal.ScribeStackManager / createLayer
在matlab.graphics.shape.internal.ScribeStackManager / getLayer
在matlab.graphics.shape.internal.ScribeHost > findAnnotationPane
在matlab.graphics.shape.internal.ScribeHost / setPeerParent
在matlab.graphics.shape.internal.ScribeHost / checkPeer / nDelayedReparent
在matlab.graphics.shape.internal.ScribeHost > @(年代,e) nDelayedReparent ()

Zhangjun余

克利斯朵夫

这是一个极好的工具箱。我感谢支持,文档和示例。万博1manbetx

你能在以后的更新中为html文档中的属性添加默认值吗?

大卫·桑普森

Tobias,我想你是对的,在某一点上有一个属性SelectionChangedCallback。我要调查一下发生了什么事。在GLT1和GLT2之间,由于属性重命名和对回调事件数据的更改,在这方面进行了很多工作。

我努力坚持的原则是:
* GLT1 uiextras代码在GLT2中运行
*最小的不兼容,没有文档记录,随着GLT2版本的进步

托拜厄斯

谢谢David的回复。我的错,我的意思是“SelectionChangedCallback”。我可能跳过了一个版本,但是在2.1中。我使用的版本是uix。TabPanelhas a property "SelectionChangedCallback" and in the current version it is "SelectionChangedFcn". Don't want to nit-pick, the issue just came up.

大卫·桑普森

当然,搜索将产生一个结果——这个页面——在谷歌爬虫的下次访问之后!

大卫·桑普森

Tobias,没有GUI Layout Toolbox TabPanel类拥有或曾经拥有TabSwitchCallback或TabSwitchFcn属性。两者都有一个属性SelectionChangedFcn。

对TabSwitchFcn进行谷歌搜索根本不会得到任何结果。

托拜厄斯

嗨,我真的很喜欢这个工具箱。但是它与以前的版本的向后兼容性似乎很低。几分钟后,我发现了几个问题。是否有已更改的命令/选项列表?像TabPanel。TabSwitchCallback -> TabPanel.TabSwitchFcn。
那太有帮助了。

杰森

伟大的工具!我很想知道使用方框和网格放置UI组件是否有什么优势。其中一个是否比另一个更高效(cpu/内存方面)?我计划创建一个相当复杂的GUI,所以我希望尽可能高效地设计它。

大卫·桑普森

泰德,文件交换吃了我的标签,但你应该明白我的意思。

大卫·桑普森

Uibuttongroup处理选择,但不处理定位。通常位置是固定的,但你可能想把uibuttongroup放在GLT容器中。

g = uibuttongroup('Units', 'pixels', 'Position',[20 20 200 70],…
'SelectionChangedFcn', @onClicked);
c (1) = uicontrol(“父”,g,“风格”,“radiobutton”,“弦”,“汤姆”,…
'单位','像素','位置',[5 45 190 20]);
c (2) = uicontrol(“父”,g,“风格”,“radiobutton”,“弦”,“迪克”,…
'单位','像素','位置',[5 25 190 20]);
c(3) = uicontrol('Parent', g, 'Style', 'radiobutton', 'String', 'Harry',…
'单位','像素','位置',[5 5 190 20]);

函数onClicked(源,~)
做一些有用的事
结束

uix。VButtonBox等处理定位,但不处理选择。然而,添加选择并不困难。

p = uipanel('Units', 'pixels', 'Position', [0 0 200 70]);
G = uix。VButtonBox('Parent', p, 'Padding', 5, 'ButtonSize',[200 20],…
'HorizontalAlignment', 'left');
c (1) = uicontrol(“父”,g,“风格”,“radiobutton”,“弦”,“汤姆”,…
'Value', 1, 'Callback', @onClicked);
c (2) = uicontrol(“父”,g,“风格”,“radiobutton”,“弦”,“迪克”,…
'Value', 0, 'Callback', @onClicked);
c(3) = uicontrol('Parent', g, 'Style', 'radiobutton', 'String', 'Harry',…
'Value', 0, 'Callback', @onClicked);

函数onClicked(源,~)
源。值= 1;%选择此
set(c(c~=source), 'Value', 0) %取消其他选项
做一些有用的事
结束

泰德•迪赫

我似乎无法得到uix。VButtonBox(or HButtonBox) to work with radiobuttons, in the sense of having the buttons linked like what occurs when using uibuttongroup. When I use the uix approach, the buttons act independently. If I place a uibuttongroup (with radiobuttons in it) inside a uicontainer which is then in a uix entity, I get the buttons to be linked, but their motion inside the uibuttongroup has the same old scaling problems with window resizing. Running 2016a.
Gui布局工具箱是否与单选按钮工作,如果是这样,有人可以发布一个简单的例子。工具箱中所有的“按钮”示例都是简单的未链接(独立)按钮,没有一个我发现显示链接单选按钮。——谢谢!

布赖恩特

汤姆·赖特

kp

请忽略我之前的信息。这是由于我的MATLAB路径的一些问题。

kp

我在2016a下的2.1.2和2.2.2都有问题,但2015b没有。我在MATLAB中得到这个错误信息:
类matlab.graphics.primitive.canvas. javaccanvas不存在公共属性Units。

我记得我的代码以前在2016a的2.1.2下工作。这可能是因为Java的更新吗?

安德鲁•麦特卡尔夫

我想我可能发现了一个小错误-我还没有在这些评论中找到任何关于这个的东西。

这与ui上的“Title”有关。BoxPanel,and I can demonstrate this bug using the included demoBrowser.m.

在我的13寸MacBookPro视网膜显示屏上,标题被“……”提前截断。它们是:“选择一个de…”和“查看:L…”。无论如何调整大小都无法解决这个问题,而且有足够的空间显示整个标题。

在非视网膜显示器的Windows桌面上运行相同的代码可以正确显示完整的标题。

谢谢。

大卫·桑普森

Sucheta,我不认为这个错误与GUI布局工具箱有关。您能否提交一份技术支持请求,包括MATLAB版本细节和简单的复制步骤?万博1manbetx

Sucheta Sehgal

在运行GUI脚本文件时,我得到以下错误。

"使用matlab.ui.container.Panel/set . panel错误
Panel类上没有宽度限制属性。”

大卫·桑普森

在2.2.2版本中,我在GUI布局工具箱中添加了非常基本的使用跟踪。每一次MATLAB会话,GUI布局工具箱报告工具箱版本,MATLAB版本和操作系统。不传输任何个人身份信息。跟踪是可选的——您将被提示——但我鼓励您参与,以帮助我们了解GUI布局工具箱的使用情况,并为该领域的持续开发制定计划。

大卫·桑普森

GUI布局工具箱2.2.2版本现已可用。此次要版本包括:
*支万博1manbetx持所有容器类型中的数据游标轴
*改进了flex容器的指针管理

大卫·桑普森

Grzegorz,目前,GUI布局工具箱不支持属性名或枚举字符串属性值的大小写不区分或部分匹配。万博1manbetx我会考虑放松的。

Verma Arti

我在运行使用此工具箱运行的BEMacoustics工具箱时遇到了问题。
这是错误消息

使用uiextras时出错。容器(第61行)
尝试使用双手柄MATLAB图形在新的图形系统上运行。
请重新安装。

如果有人能指导我如何解决这个问题就太好了。

赛斯肯纳

谢谢你大卫,

它工作得很好。我试图类似于deploytool面板的工作方式,在标题栏中单击的任何地方,它们都会最小化/最大化,因为它感觉更用户友好。

Grzegorz利珀

我在区分大小写方面有一个问题:
uiextras。HBox('parent', someHandle) adds the HBox to the figure children, not someHandle, without warning/error.

我花了一段时间才明白:
uiextras。HBox('Parent', someHandle) which works fine.

大卫·桑普森

Abbey,即将发布的版本中将包含一个更改,这样您就不需要仅仅因为想使用数据游标而将坐标轴放入容器中。不过,对于图例和颜色条,您仍然需要这样做。

大卫·桑普森

赛斯,是的,实现这种行为是可能的。

我在本周早些时候启动了发布流程,所以这个更改不会包含在下一个版本中。

如果你想在本地进行更改,那么:
*在Set中设置TitleText Callback。MinimizeFcn
*根据MinimizeFcn是否为空来管理TitleText的Enable属性
*在redrawButtons中分离并重新附加TitleText,以确保点击后它没有被选中

另一个问题是人们是否觉得你提出的行为是凭直觉的。

赛斯肯纳

是否有一个简单的方法添加minimizeFcn回调到一个BoxPanel的TitleText以及?这将使最小化和最大化面板更容易,因为最小化按钮可能很小,有时很难点击。

修道院鲁洛夫•

这个工具箱很棒。需要注意的是:文档中提到使用uicontainer来正确显示图例和颜色条;在使用datacursormode时,这似乎也是必要的。

修道院鲁洛夫•

胡安Henao

请原谅我的知识不足,我曾经使用向导工具开发过一些相当复杂的gui,但后来我看到了这个,哇,它有很棒的功能。关键是:这个工具箱是否有图形版本,就像指南中那样,还是我必须学习代码?
谢谢你出色的工作,继续前进!

大卫·桑普森

布莱恩特,是的,但是我们(MathWorks)正在做的事情是如何和什么时候做的。

布赖恩特

是否会有一个与新的应用程序设计器UI对象/图形兼容的版本?

d . Plotnick

太好了!

尼尔凯思内斯郡

我已经使用GUI布局几年了,发现它是一个很好的工具。快速问题:我可以配置编译后的应用程序作为Windows系统托盘后台进程运行吗?任何帮助都很感激。

基督教

在我们的一些代码中,我们重载了一些容器的redraw()方法,以返回容器的当前“Sizes”属性。由于将我们的代码更新到>R2014b,每当重绘这样的元素时,都会导致大量输出到命令行。我将此追溯到uix.mixin.Container中的两行(第129行和第149行),其中调用redraw()方法时不带分号来抑制输出,显然是因为不期望输出。

假设这不会破坏其他任何东西,是否可以简单地在这些行末尾添加分号来抑制输出?

大卫·桑普森

Carsten,在文档2.2节“与版本1的兼容性”中有关于uix和uiextras的讨论。

如果你写的新代码只需要在14b和以后的版本中工作,那么就使用uix。否则使用uiextras。

Carsten

谁能解释一下什么时候使用uix和uiextras ?

有什么区别呢?

大卫·桑普森

针对安装问题的报告,我做了一个快速测试。我从File Exchange下载了2.2.1,并成功安装了15b和16a。我的设置是win64和本地插件目录。我在MATLAB桌面的当前文件夹视图中双击mltbx文件进行安装。

球赛

克莱门斯Nyffeler

我注意到,有时,如果我有一个VBox在一个uipanel, Matlab崩溃时关闭的数字。我也可以通过手动删除特定的罪魁祸首VBox来重现崩溃。

我可以通过使用uix来解决这个问题。面板而不是uipanel。我这是一个已知的问题或其他什么原因替换uipanel与uiextras/uix.Panel?

目前我还存在Matlab崩溃的问题。我通过逐个删除图中的所有子对象来跟踪这个问题。当删除最后一个子对象时发生崩溃,该对象又是一个以Figure本身为父对象的VBox。

崩溃表现为“”中的“访问违规”。我在R2014b上使用2.2.1版本。

菲利普

你好大卫,

我尝试使用GUI布局工具箱的组合uiccomponent从Yair Altman和有一个问题的组合。
下面的代码可以工作,它仍然将uiccomponent放入uipanel中:

Hf1 =图;
hvb1 = uix.VBox('Parent',hf1);
hp1 = uipanel('Parent', hvb1);
hjl1 = uicomponent(‘风格’,‘JLabel’,{“没有数据”},…
HorizontalAlignment, javax.swing.SwingConstants。中心,…
VerticalAlignment, javax.swing.SwingConstants。中心,…
“背景”,javax.swing.plaf.ColorUIResource (1,0,0));
set(hl1,' Parent',hp1, 'Units','normalized', 'Position',[0 0 1 1]);

但当我尝试直接使用uiccomponent与vbox时,我必须调整图形窗口的大小以获得正确的显示:

Hf2 =数字;
hvb2 = uix.VBox('Parent',hf2);
hjl2 = uicomponent('Parent',hvb2, 'Style','JLabel', {'no data'},…
HorizontalAlignment, javax.swing.SwingConstants。中心,…
VerticalAlignment, javax.swing.SwingConstants。中心,…
“背景”,javax.swing.plaf.ColorUIResource (1,0,0));

是否有一种方法可以获得正确的行为,而不必将uiccomponent放入额外的面板中?

马库斯

对不起,但是我认为mltbx文件在2015b和2016a下不能工作。我双击文件“GUI Layout Toolbox 2.2.1。”Mltbx”和安装标志在顶部。我按下“安装”按钮,同意条款。在什么都没有发生之后……

有人有同样的问题吗?

实验后奥特曼

我现在只看到了@Tanmay的评论和@David的建议。我刚刚上传了一个固定版本的UICOMPONENT,它接受HG2 (inc. uiextras)容器作为父容器,以及之前所有可接受的父类型。

Ahmad透明丝织物

我下载了mltbx文件,双击它,仍然没有安装的迹象。我输入了布局,我收到这个错误“警告:没有正确格式化的内容。”M文件被发现为'布局'。”请帮助,我正在使用matlab R2015a的ubuntu。

大卫·桑普森

请确保您下载的是mltbx文件而不是zip文件。

要安装工具箱,请在Current Folder视图中双击它。

要检查工具箱是否已安装,请在命令提示符处输入“ver layout”,或启动“加载项管理器”。

Ahmad透明丝织物

我试图在matlab r2015a上安装工具箱,但没有工具箱正在安装的指示。请帮助。

大卫·桑普森

去年年底,有一些报告称flex容器的指针状态被弄乱了。问题是如何处理不同容器中相邻分隔符之间的转换。在刚刚发布的2.2.1版本中有一个修复。

如果您对现在如何协调指针更改感兴趣,请查看ui . pointermanager。

莱昂纳多Araujo

成功了,大卫。现在这条线花费了0.06秒而不是0.28秒。非常感谢。

大卫·桑普森

莱昂纳多,回到你关于表现的问题。我想提醒大家重新排序布局内容使用属性contents,而不是属性Children。

在GLT文档中有关于差异的讨论,但这里是简短的版本。子是垂直堆叠顺序,由MATLAB定义,与大多数GLT用例无关。内容是布局顺序,由GLT定义。

如果您通过child重新排序,MATLAB将依次分离它们(每个重绘一次),然后依次重新连接它们(每个重绘一次)。如果子节点是GLT容器,那么每个步骤都可能*也*调整大小,因此也会重绘每个子节点。如果你细心的话,你可能会把所有东西都按正确的顺序排列好。最后,所有这些分离和重新连接将删除您的大小,所以您也必须重新设置它们(另一个重绘)。

相反,当您通过Contents重新排序时,您将得到一次重绘,并且GLT会自动为您排列大小。

>> b = uix。HBox( 'Parent', figure, 'Padding', 2, 'Spacing', 2 );
>> for ii = 1:30, uicontrol('Parent', b);结束% 30重绘
>> b.Widths = -rand(size(b.Contents));% 1重绘
>> [~, i] = sort(rand(size(b.Contents)));
>> b.Contents = b.Contents(i);% 1重绘
>> b.Children = b.Children(i);% 60重绘,宽度都是-1

大卫·桑普森

目前不支持单元格跨越,因为我觉得它使API万博1manbetx过于复杂。您必须坚持使用嵌套容器。

莱昂纳多Araujo

我认为这行不通,大卫,因为每一行都有不同的列数。有什么方法可以做到吗?

大卫·桑普森

李奥纳多,我会考虑在以后的版本中使用这个。以下是对ui .mixin. container的修改:
*定义一个属性RedrawMode来控制是否重绘
* In set。Dirty,添加一个条件,只在RedrawMode为on时重绘
* In set。RedrawMode,当设置为'on'时,如果脏则重绘(参见onFigureChanged)

我看到你用的是VBox,里面全是hbox。Grid对你有用吗?

莱昂纳多Araujo

谢谢你的回答,大卫。

有可能禁用这些重绘吗?

这是需要更多时间的代码行,0.28秒:

vbox10。Children = [edit_description_hbox edit_manager_hbox edit_brokerage_hbox…]edit_strategy_group_hbox……edit_total_value_day_trade_hbox……edit_quantity_price_hbox……
Edit_account_hbox edit_client_hbox edit_liquidity_date_hbox edit_deal_time_hbox;

大卫·桑普森

列奥纳多,我想你的意思是你重新排序Contents,而不是Children,尽管两者是密切相关的。

还有一些改进性能的余地。在您的示例中,GLT将分别重新计算两次HBox内容的大小——一次是在以默认大小添加新项目时,一次是在新项目调整为最终大小时——而只计算一次大小是可能的。这可以通过设置临时禁用重绘的选项来实现,尽管你必须记得打开它们。另一个解决方案是为新项目设置一个可配置的默认大小。

注意,当您快速连续地更改属性时,图形系统实际上不会重新绘制所有内容两次。这通常比计算大小要昂贵得多。

出于兴趣,你在每个级别有多少GLT容器,重绘需要多长时间?

莱昂纳多Araujo

嗨,大卫,

我试图做一个非常动态的GUI,所以我经常插入或取出vbox的一些组件。例如,很多时候我想在用户按下按钮时将一个hbox插入到vbox中。当我将hbox的父节点设置为vbox时,hbox作为最后一个子节点被插入,但我希望它是第三个子节点,例如。因此,我使用vbox的Children属性并改变其组件的顺序。

我意识到这个过程有点慢,几乎消耗了我的函数总执行时间的20%。你是否有更快的方法来完成它,或者你是否打算改进这个过程的性能?

谢谢你,恭喜你有这个神奇的工具箱。

胡里奥•加西亚

大卫·桑普森

亨利,你发现了一个微妙的漏洞。如果ForegroundColor的第一个改变是黑色,那么这个改变没有任何作用。

我将在下一个版本中包含一个修复。在BoxPanel构造函数的前两行之后,请添加:
obj。ForegroundColor = ForegroundColor;

亨利。

非常感谢您的支持。万博1manbetx问题是,我总是试图将ForegroundColor属性设置为黑色[0,0,0]。然而,文本颜色仍然是白色。今天我尝试了[0.1,0.1,0.1],它工作得很好,即使它是灰色的而不是黑色的。

大卫·桑普森

Henri,有一个属性ForegroundColor。ForegroundColor更改标题文本的颜色。BackgroundColor控制标题的背景色。HighlightColor和ShadowColor控制边框颜色。

亨利。

你好,大卫,非常感谢你的这个伟大的工具箱!

你能给我一个提示,如何改变一个BoxPanel标题的ForegroundColor吗?从2014b版本开始,我仍然可以设置属性“TitleColor”,这将改变标题框的背景颜色,但不再是“ForegroundColor”,它曾经用来改变标题的文本颜色。

亨利。

大卫·桑普森

亚历克斯,我还在修复指针混淆的问题。这将包含在下一个版本中,可能在2月份。

亚历克斯Perrone

David,刚刚更新到最新版本(2016年1月12日)。我发现一个鼠标光标问题,调整标签“下面”,不再发生。然而,该版本并没有纠正鼠标光标“混淆”在相邻的伸缩容器上显示哪个展开箭头的问题,并随后卡住作为展开箭头。这是为了纠正这个吗?非常感谢你给我这个工具箱。

Darya Shcherbakova

大卫,非常感谢你的帮助!它现在工作得很完美:)

劳伦特

大卫·桑普森

忽略我上一篇文章中的第三和第四行代码。

大卫·桑普森

Darya,看看按钮框类,HButtonBox和VButtonBox。这允许您指定其子节点的宽度和高度,并使其子节点垂直和水平对齐。一个常见的用法是在对话框底部的一排按钮。

在本例中,将您要显式控制其大小的按钮分别放入一个按钮框中。

F =图();
G = uix。网格( 'Parent', f, 'Padding', 10, 'Spacing', 10 );
N = 4;
对于ii = 1:10, s{ii} = deblank(evalc('why'));结束
B = uix。HButtonBox('Parent', g, 'ButtonSize', [100 20]);
uicontrol('Parent', b, 'String', 'MATLAB');
uicontrol('Parent', g, 'Style', 'text', 'HorizontalAlignment',…
'right', 'String', 'Indiana Jones:');
uicontrol('Parent', g, 'Style', 'text', 'HorizontalAlignment',…
'right', 'String', 'Three Colors:');
B = uix。HButtonBox('Parent', g, 'ButtonSize', [100 20]);
uicontrol('Parent', b, 'String', 'S万博1manbetximulink');
uicontrol('Parent', g, 'Style', 'listbox', 'String',…
{《夺宝奇兵》、《末日神殿》、《最后的十字军东征》});
uicontrol('Parent', g, 'Style', 'listbox', 'String',…
{“蓝”,“白色”,“红”});
g. width = [-1;-1];
g.高度(1)= 20;

亚历克斯Perrone

Darya,你能不能做一些额外的面板,比如有一个不那么宽的按钮,你可以在一个HBox中有三个面板:左,中,右。然后你可以让中间的尺寸固定(更小),把按钮放在那里。唯一的问题是(我相信)这三个中只有一个可以在宽度上使用-1填充剩下的大小,所以最好有两个面板,并将按钮放在左边或右边,而不是居中。

Darya Shcherbakova

你好大卫,

谢谢你的快速回复。现在我很清楚发生了什么。

为了我的程序(用于后处理一些数据)的目的,我在网格上有很多组件:复选框、文本框和简单的文本-它们的大小取决于它们自己的内容或网格列的宽度:例如,我在我的网格中左侧有文本标签,右侧有相应的文本框。

然后我想添加一个按钮,并将其置于网格上方的面板中(面板和网格具有相同的VBox父组件,例如面板的宽度=所有网格列的宽度之和)。但我真的不想有这么宽的按钮(因为我的网格是相当宽的),我无法找到一个方法来修复它。

大卫·桑普森

Darya, GUI布局工具箱容器控制设置其内容的位置。对于网格,内容会填充单元格。也许您可以解释为什么在您的特定情况下需要覆盖某些大小。

Darya Shcherbakova

你好,

我正在编程一个GUI使用GUI布局工具箱和默认的Matlab组件。我注意到,如果我在类uix的父类上使用uicontrol Pushbutton或popup。网格或uix。面板and set the size of Pushbutton or popup components not to be equal to the width of a Grid column or Panel (by specifying a Position property manually for these components by changing the width and height only), then when running my program it still resets to the sizes of a Grid and Panel components. If I insert a "keyboard" into the code and start debugging my code gradually, the sizes of PushButton and popup are specified correctly based on their own Position property and don't change when GUI window program runs till the end.

我在Matlab的GUI编程方面不是很有经验。我试图自己解决问题,但我似乎不明白这种行为的来源。

它是否与GUI布局工具箱组件定义有关,我不知道?

大卫·桑普森

Alex,抱歉我误解了你的bug报告,因为我没有向下滚动到代码之外的截图。认错。出现这个问题是因为我在检查指针是否在任何除法符上面,而不是除法符是否在上面。昨天发布的2.2版本采用了一种新的技术来检测指针何时越过了分隔符,并修复了这个问题。

亚历克斯Perrone

David,哇,这是保持伸缩容器同步的好方法,我不知道你可以在那里监听更改。然而,我并不关心是否保持它们同步。问题是,你可以神秘地改变一个选项卡上的弹性边框从*另一个选项卡。一个人不应该那样做。然而,它可能是与Gui布局工具箱和uitab的交互,我使用后者的原因在2015年6月24日的帖子中给出。我给你的邮件发了一个屏幕截图,说明了这个问题。请对视频做任何你想做的事情(例如在公共地方发布,这个网站和gist不允许发布视频,这就是为什么我在要点上做了截图)。

大卫·桑普森

Alex,如果我没理解错的话,你在多个选项卡上有伸缩容器,你想让它们保持同步。

目前,flex容器上没有通知内容大小更改的事件。作为一种变通方法,您可以对伸缩容器内容的大小变化做出反应。例如:

F =图();
P = uix。TabPanel( 'Parent', f );
H1 = uix。HBoxFlex( 'Parent', p, 'Padding', 10, 'Spacing', 10 );
b1 = uicontrol('Parent', h1, 'String', '1');
uicontrol('Parent', h1, 'String', '2');
H2 = uix。HBoxFlex( 'Parent', p, 'Padding', 10, 'Spacing', 10 );
b2 = uicontrol('Parent', h2, 'String', '3');
uicontrol('Parent', h2, 'String', '4');
addprop(h1, 'ContentsSizeChangedListener');
h1。ContentsSizeChangedListener =事件。侦听器(h1。内容,…
SizeChanged, @(~ ~)组(h2,“宽度”,h1.Widths));
addprop(h2, 'ContentsSizeChangedListener');
h2。ContentsSizeChangedListener =事件。侦听器(h2。内容,…
SizeChanged, @(~ ~)组(h2,“宽度”,h1.Widths));

亚历克斯Perrone

与之前关于鼠标扩展箭头的文章类似,尽管看起来是一个独立的问题:当一个选项卡上有一个可调节的边框时,你可以从另一个选项卡上调整它。是我设置的标签不正确,还是…?请参阅这里的代码和解释:
https://gist.github.com/alexperrone/2970592e19e3479ecba6

亚历克斯Perrone

大卫,这个问题实际上可以归结为:
*指针被相邻伸缩容器之间的转换混淆
当我将鼠标悬停在HBoxFlex和VBoxFlex的边界附近时,鼠标光标就会像箭头一样卡在那里。如果我把一个改为NOT be flex,箭头方向显然没有冲突,也不会卡住。我有可复制的代码和一段视频可以直接发给你。

大卫·桑普森

Alex,我在这方面遇到了一些问题:
*停靠图窗口指针错误-修复将很快发布
flex容器中Java组件指针错误(零星)-正在调查中
*指针被相邻伸缩容器之间的转换混淆了-只是标识

了解您看到的问题是否属于上述任何一类,以及它们是依赖于指针路径还是依赖于速度,这将是很有帮助的。

亚历克斯Perrone

每当我将鼠标悬停在ui中的可调整边框上时。HBoxFlex,the mouse cursor changes to the expansion arrow and stays as an arrow everywhere throughout the GUI and never returns back to the normal mouse cursor. Any ideas?

像许多其他的,GUI目前是相当复杂的,将尝试最小的可复制的例子,如果不是一个容易修复或检查的东西。使用R2014b和2015年6月版本的Gui布局工具箱。谢谢你!

Alexander Stepanov

小改进建议-如果可以分别设置每个标签的宽度,将是很好的,以防你必须混合标签与短和长的标题。

Alexander Stepanov

谢谢你,大卫。是的,你对[1 1 parentPixelPos(3:4)]是正确的。

我用像素设置位置,而不是标准化的单位,以提供额外的填充内容。例如,如果你尝试将[0,0,1,1]规范化位置的javacomponent设置为带有某些标题的uipanel的子元素,你会注意到它显示在标题的顶部,完全隐藏了它。在像素位置设置好之后,我将单位恢复为规范化,所以调整大小工作得很好。是的,当您调整大小时,填充大小略有变化,但这几乎不明显。

我猜正确的方法应该是像你建议的那样连接SizeChangedFcn回调。

我必须使用位置,因为我使用我自己的布局管理器相当广泛,以微调uicontrol布局面板内创建的uix工具箱。我将考虑向它添加SizeChangedFcn。现在我已经实现了一个解决方案,当添加子(uix。VBoxor similar) to a TabPanel tab, switches briefly to that tab and switches back. That seems to solve the issue for me:

% panel是父组件,我们刚刚向其添加了子组件(例如uix.VBox)
如果isa(面板。解决GUI布局工具箱中位置计算问题的方法
tabPanel = panel.Parent;
lastSelection = tabPanel.Selection;

[~, ind] = ismember(panel, tabPanel.Contents);注意:与Children不同,Contents有正确的顺序
tabPanel。选择ion = ind; % Temporarily select the tab. From now on position should be determined correctly

tabPanel。选择ion = lastSelection; % Restore selection
结束

大卫·桑普森

亚历山大,你提到了一些有趣的问题,我想谈谈。

首先是一个小问题。在代码中,您不希望将Java组件在其容器中的位置设置为其容器在其父容器中的位置。你可能指的是javacomponent(jPanel,[1 1 parentPixelPos(3:4)],hSecondPanel)。总之,更有趣的是……

javacomponent(name,position,parent)设置父节点,*然后*设置位置。由于GLT容器在添加内容时布局,因此后续设置为Position会破坏GLT Position。实际上,我们建议您不要自己设置GLT容器内容的Position,但是通过使用javacomponent,您可能会无意中这样做。

相反,您可以创建unparent Java组件javacomponent(name,[0 0 1 1],[]),然后将其Parent设置为第二步。

确实,我们不保证GLT面板中未选中内容的位置。因此,不能保证未选择内容的getpixelposition在选择后将返回相同的结果。无论如何,您很可能希望Java组件的大小是合理的,不仅仅是在初始阶段,而且在父组件调整大小时也是如此。为此,可以将它放在GLT容器中(注意上面的要点),也可以使用父容器的SizeChangedFcn连接自己的布局函数。

总而言之,我会用以下内容替换最后5行代码:
[jPanel, cPanel] = javacomponent('javax.swing. swing. javacomponent)。JPanel', [0 0 1 1], []);
jPanel)。集Border( javax.swing.BorderFactory.createLineBorder( java.awt.Color.blue ) );
set(cPanel, 'Parent', hSecondPanel, 'Units', 'normalized', 'Position', [0 0 1 1])

最后,直接联系我,网址是firstname.lastname@mathworks.co.uk。

Alexander Stepanov

需要明确的是,这不仅仅是关于@getpixelposition。如果你试图用其他方法获得位置,你也会面临同样的问题,例如简单地:parent.Position。显然,能够覆盖所有情况的唯一解决方案是在Position属性上定义pre-和post-set监听器…

Alexander Stepanov

因此,简而言之,你不能依赖@getpixelposition结果,除非该选项卡当前被选中。我能想到的一个解决办法是,在调用@getpixelposition找到所有父选项卡面板之前遍历所有祖先,在每个父选项卡中选择各自的选项卡,然后恢复选择。这是非常丑陋的,将导致大量的闪烁在UI中。

Alexander Stepanov

你好大卫,

我的问题(制表符返回不正确的像素位置)与我如何设置位置无关——两种方法(通过javacomponent和它的uicontainer对等体)都可以正常工作。问题在于确定正确的位置。请找到一个非常简单的重现问题的代码片段(对不起,不知道您所说的“文件交换”联系表单是什么意思-您指的是“联系我们”表单以联系Mathworks吗?)

代码片段如下。运行第一组命令,然后切换到第二个选项卡,然后运行剩下的两个命令。您将看到横跨整个选项卡内容的整洁的蓝色边框。

要再现该问题,请先运行所有命令,然后切换选项卡。你将看不到任何边界。然后检查parentPixelPos vector有什么-这就是问题所在。

hFig = figure();
hTabPanel = uix。TabPanel('Parent', hFig);
uicontainer(“父”,hTabPanel);
hSecondPanel = uicontainer('Parent', hTabPanel);
jPanel = javax.swing.JPanel;
jPanel.setBorder (javax.swing.BorderFactory.createLineBorder (java.awt.Color.blue));

parentPixelPos = getpixelposition(hSecondPanel);
javaccomponent (jPanel, parentPixelPos, hSecondPanel);

大卫·桑普森

丹尼尔,你能直接告诉我完整的复制步骤吗?

我自己不使用多个监视器,所以工具箱的某些部分可能不能很好地处理这一点。我很乐意解决这个问题,而且我对其他用户在使用多个显示器时是否有任何问题很感兴趣。

我计划在这个月发布。您引用的特定代码(uix.LocationObserver)已被删除。尽管如此,我想要您的复制步骤,以便我们可以向我们的测试套件中添加一个测试。

丹尼尔Lyddy

我使用这个工具箱在单个图形中设置了一些并排的窗口,当我实例化任何新图形时,默认情况下它是停靠的。如果我然后取消停靠的数字,发送一些图形到任何窗口,并执行“drawnow”命令,我得到以下java错误:

执行回调时发生错误:
使用uix时出错。LocationObserver/update/getFigurePixelPosition(行239)
发生Java异常:
illegalcomponentstateexception:组件必须显示在屏幕上
确定它的位置

在java.awt.Component。得到LocationOnScreen_NoTreeLock(Unknown Source)

在java.awt.Component。得到LocationOnScreen(Unknown Source)

ui错误。LocationObserver/update(第197行)
像素= getFigurePixelPosition(…

ui错误。LocationObserver/onSizeChanged(第305行)
obj。更新(来源)

uix.LocationObserver>@(varargin)obj.onSizeChanged(varargin{:})中的错误(第123行)
cbSizeChanged = @obj.onSizeChanged;

我不是Java程序员。我应该如何理解这个错误消息?

注意,取消与图形的对接通常会导致它出现在我的右侧显示器上;我有两个。MATLAB图形用户界面在我左边的显示器上运行。我在Windows 7 Enterprise上运行R2014b, Service Pack 1。

下面是我在MATLAB命令行中输入“opengl info”时得到的结果:

>> opengl info
版本:“4.4.0”
供应商:“NVIDIA Corporation”
渲染器:'Quadro K2100M/PCIe/SSE2'
MaxTextureSize: 16384
Visual: 'Visual 0x07, (RGBA 32位(8,8,8),Z深度…'
软件:“假”
万博1manbetxSupportsGraphicsSmoothing: 1
万博1manbetxSupportsDepthPeelTransparency: 1
万博1manbetxSupportsAlignVertexCenters: 1
扩展:{293x1 cell}
MaxFrameBufferSize: 16384

大卫·桑普森

亚历山大,我有几点看法。

“你需要像素位置来使用javaccomponent。”事实上,你不需要。相反,通过设置uicontainer对等体的Parent、Units和position (javaccomponent的第二个输出参数)来定位。屏幕上的Java小部件位置会自动与同级容器的位置同步。或者只是将Parent设置为GUI布局工具箱容器,让它管理其子元素的单元和位置。

>> t = uix。TabPanel( 'Parent', gcf, 'Padding', 10 );
>> [s, c] = javacomponent('javax.swing. ')。JSpinner”);
c.Parent = t;

如果您想给我发送复制步骤的情况下,位置是不同的前后选择一个选项卡,请通过文件交换联系形式,我将很乐意提供进一步的反馈。

Alexander Stepanov

我现在面临着一个不同的问题。我需要获得uix对象的像素位置(您需要像素位置来使用@javacomponent,一般来说,如果您想要完全控制元素在内部的布局方式)。我还使用了ui。tabpanel。问题是,直到切换到选项卡(控件在其中至少一次(!)),位置才会正确确定。即使现在画画也没用。

例如,这是我在切换标签(错误)之前得到的位置:

K>> get(parent, 'Position')
ans =
11 1192 795

这是我在切换标签后得到的位置(正确):

K>> get(parent, 'Position')
ans =
1 747 1192 30

显然,垂直位置是完全错误的。所以我必须在继续呈现布局之前以编程方式浏览所有选项卡,否则我的所有控件甚至都不可见,因为它们的位置完全错误。工具箱的V1没有这样的问题。

Alexander Stepanov

大卫,两种方法我都可以接受。现在我已经黑了uix。容器(basically using similar code as in uix.Empty + extra onParentColorChanged call to initialize), but applying DefaultUicontainerBackgroundColor probably makes more sense than inheriting from parent.

大卫·桑普森

Alexander, MATLAB图形默认系统不能扩展到非内置类,所以我们不支持set(0,'DefaultHboxBackgroundColor')。万博1manbetx

然而,我们可以决定将DefaultUicontainerBackgroundColor和/或DefaultUipanelBackgroundColor应用到新的uix子类型。人们会怎么想?

我认为,当存在设置(普通)容器默认值的机制时,从图默认值推断(uix)容器默认值是不合适的。

大卫·桑普森

Alexander,在uix上。空background color initialization, you are right: I need to call onParentColorChanged, although this should be guarded with if ~isempty(obj.Parent).

Alexander Stepanov

甚至是uix。空has a problem. It sets the listener which handles subsequent background color changes, but it does not initialize the background properly when created. Makes sense to add onParentColorChanged(obj) call at the end to do this. But more importantly, all other uix components should do this as well.

Alexander Stepanov

我假设您已经意识到了这个问题,因为uix。空has explicit code to handle it: event listeners and corresponding onParentChanged / onParentColorChanged callbacks, which set uicontainer background to match parent. Why is it not done for any other uix objects, e.g. in uix.mixin.Container?

Alexander Stepanov

首先,谢谢你的工具箱!

我的默认背景色有问题。我最近升级到R2015b,也在Windows 2008 Server上运行Matlab。显然,这种组合在某种程度上导致Matlab初始化所有具有奇怪的粉红色背景的图形([0.94,0.94,0.94]),而所有其他UI组件都是深灰色的。我可以简单地通过设置:

集(0“DefaultFigureColor”[214211206]/ 255);

这适用于我创作的所有人物。然而,uix对象直接继承自matlab.ui.container.internal.UIContainer,这导致了相同的粉色背景。我需要为每个新uix对象设置背景。有没有办法让它与我设置的全局背景颜色保持一致?

Tanmay Rajpathak

谢谢David,我给作者提了建议。我面临用户界面。网格的一个问题。我正在绘制12个饼图,尽管我将间距设置为0,但每个网格中都有太多的空白空间。你能提出一个解决办法吗?

谢谢

亚当

我通常将uiccomponents嵌入到一个没有标题或边框的父uipanel,然后父uipanel到布局,然后布局将处理面板很好。

如。

hSliderPanel = uipanel(…)
hSlider = uiccomponent ('Style', 'JSlider',…);
set(hSlider, 'Parent', hSliderPanel, 'Units', 'normalized', 'Position', [0 0 1 1];

我不想讲太多细节,因为这有点超出了对这个特定工具箱的评论范围,但这是我使用的设置类型。我没有使用过文件选择器,但我认为您应该能够使用它做一些类似的事情。

关于非图形的父母化,我实际上只是抑制了这个警告,因为面板的父母化确实有效,甚至直接地,我认为,但不适用于布局,因此上面的解决方法。

大卫·桑普森

Tanmay,进一步研究uiccomponent代码,我看到:
1.文档说只有数字被支持为Parents,但代码试图支持uicontain万博1manbetxers, uipanel, uitabs。
2.检查有效的Parent是通过类名的字符串比较,而不是isa。这就是为什么它拒绝GLT容器,这是uicontainer的子类。

请让作者通过检查isa(hParent,'matlab.u万博1manbetxi.container.Container')来添加对HG2 uicontainer子类的支持。这是一个没有文档记录的类,但这应该会增加而不是减少它对作者的吸引力!

大卫·桑普森

Tanmay,我不熟悉uiccomponent,但我刚刚下载了它来运行您的复制步骤。我看到一个警告,设置一个uiccomponent的父组件到一个容器而不是一个图是不支持的:万博1manbetx

警告:指定了非图形父组件-使用父组件的图形作为组件的父组件

Tanmay Rajpathak

亚当——是的。你如何使用它?HBox中的set Widths不识别uiccomponent。这行不通-

ImagePanel = uix。面板('Parent', InfoTabPanel, 'Background', [1 1 1], 'Padding', 10);
ImageBox = uix。HBox('Parent', ImagePanel);
uix。Empty('Parent', ImageBox, 'Background', [11 1]);
uicontrol('Style','text','Parent',ImageBox,'String', 'GSR');
uicomponent(‘风格’,‘filechooser’,‘父’,ImageBox);
uix。Empty('Parent', ImageBox, 'Background', [11 1]);
set(ImageBox, ' width ', [20 50 20 200], 'Spacing', 5)

Tanmay Rajpathak

因为set Widths不识别uiccomponent

亚当

我将尝试组合一个简单的示例,它不包括我的生产代码所具有的所有依赖项。

你是指Yair Altman的uiccomponent文件交换提交吗?如果是这样的话,我就会经常使用这个工具箱来嵌入java滑块。

Uicomponent实际上只是uicontrol的扩展,因此它不应该以任何方式与这个工具箱不兼容,尽管将Java组件与布局结合在一起存在一些需要避免的陷阱。

大卫·桑普森

亚当,你能直接联系我告诉我简单的复制步骤吗以便我们调查。

Tanmay Rajpathak

谢谢大卫,我有TabPanel分割器的问题,但这对我来说不是一个真正的问题。我找不到显示设置。使这个工具箱更加强大的一件事是,如果您可以将它与UICOMPONENT工具箱结合使用。有办法吗?

亚当

这是一个非常好的工具箱,我现在在新UI中使用它的次数比GUIDE更多。

然而,我似乎有一个重复的问题,在很多情况下,面板的右边边缘不渲染。这似乎只有当我为面板使用-1可变大小时才会发生。例如,我目前的UI有3个面板彼此并排-1宽度都坐在一个布局内。如果我将图形宽度设置为一定的值,它就能很好地呈现出来,但是对于大多数宽度,我的面板的右侧边缘(加上这3个面板中的面板)就不能呈现出来。

这似乎是固定的,如果我使面板一个固定的大小,而不是可变的,虽然这是相当的限制。

还有其他人有这个问题吗?或者知道是什么引起的?

大卫·桑普森

Tanmay,我预计这个问题与使用Windows显示设置有关,而不是100%。(检查控制面板>外观和个性化>显示。)请证实。

在R2015b中,MATLAB在支持高dpi显示方面有一些变化。万博1manbetx
http://uk.mathworks.com/help/matlab/creating_guis/dpi-aware-behavior-in-matlab.html

因此,我需要对BoxPanel和TabPanel做一些更改,并希望在未来几周内这样做。您的更改将停止错误,但您可能会注意到TabPanel分隔符看起来不太正确。

Tanmay Rajpathak

找到解决方案:
从。转916线
jData = repmat(jMask(5,:), [tabDivider.Position(4) 1]);

jData = repmat(jMask(5,:), [round(tabDivider.Position(4)) 1]);

Tanmay Rajpathak

使用repmat错误
复制因子必须是整数或整数标量的行向量。

ui错误。TabPanel/redrawTabs (line 916)
jData = repmat(jMask(5,:), [tabDivider.Position(4) 1]);

ui错误。TabPanel/redraw (line 673)
obj.redrawTabs ()

ui .mixin. container /set错误。肮脏的(第144行)
Obj.redraw() %现在重绘

ui . tabpanel /set错误。tabtitle(第563行)
obj。脏=真;

FieldMaster中的错误(第134行)
FieldTab。tabtitle = {'Cutter', 'Bit', 'Run', 'Dull'};

Tanmay Rajpathak

这不适用于R2015b。由于某种原因,我在使用repmat时出错。

日本胜利公司

Johannes -我认为你所描述的问题是由于一个已知的MATLAB问题。有关问题的描述,请参阅错误报告:

//www.tianjin-qmedu.com/万博1manbetxsupport/bugreports/1293244

对我来说有效的简短形式的修复(假设你正在编译windows)是将这一行添加到你的代码并重新编译:

javax.swing.UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”)

约翰内斯

嗨,在创建可执行文件时出现了另一个问题。所有的钮扣都没有边框。文本会显示出来,我也可以点击它们,但按钮本身是不可见的。我做错什么了吗?

约翰内斯

大卫,非常感谢你!这解决了我的问题。

大卫·桑普森

Johannes,请查看GUI布局工具箱文档的2.3节“颜色条和图例”。请将您的插图与它们的轴组合在一个uicontainer中。

约翰内斯

我在使用uix中的图例时遇到了一些问题。我将我的软件从Matlab 2014a升级到2015b,因此使用uix而不是uicontrol。经过一些修改后,它看起来和以前一样漂亮。然而,以正确的方式显示图例是不可能的。我使用了完全相同的代码,但图例没有显示在正确的图中,即使提供了正确的轴句柄。相反,它显示为一个单独的HBox在我的GUI的对应面板中的我的图表下面。知道这里会出什么问题吗?谢谢你的帮助!

15要

嗨,我如何使用这个来编辑我的GUI .fig文件?

Vinh见鬼

我可以创建一个包含多个uitabgroup的面板吗?

大卫·桑普森

Alex,请查看发布说明,它给出了在哪个版本中添加了哪些功能的简要总结。
//www.tianjin-qmedu.com/help/matlab/release-notes.html

有各种新的特性和性能改进,包括R2015b中新的“MATLAB执行引擎”。

对于GUI Layout Toolbox (v2),您可以从R2014b的任何版本访问所有功能。

亚历克斯Perrone

我使用当前版本的工具箱与Matlab 2014b。就这个工具箱而言,升级到Matlab 2015a或2015b有什么引人注目的好处吗?例如,速度的提高会影响新的Matlab版本中的Gui布局工具箱,或其他功能。

大卫·桑普森

Amy,你的问题是一个图形问题,而不是一个GUI布局工具箱的问题。绘图是方便的,但它有副作用,包括清除轴ButtonDownFcn。以下是一些建议:
1.编写一个不使用plot的低级回调函数
2.使用坐标轴事件Hit而不是坐标轴回调ButtonDownCallback

下面是第一个例子:
>> a = axes();
>> l = plot(a, 0:10, rand(1,11));
> > a.ButtonDownFcn = @(~ ~)组(l, YData,兰德(11));

安迪Goessling

我试图实现一个VBox的固定高度子(a)跟随两个比例子(b, c)。对于固定高度子(a),我想高度由(a)的任何子所需的最大高度设置。我写了一个函数,通过儿童下降和跟踪通过child. extent所需的高度。唯一的问题是,在我的生活中,我无法找到一种方法来确定面板将添加多少高度(标题+边框)在其内容上,在它被渲染之前。我知道如何使用hgconvertunits计算后,面板已经渲染,但不是之前。什么好主意吗?

艾米Brisben

你好,我很喜欢用你的工具箱检修我们的GUI。但有一个问题:是否有可能在不删除axes对象并重新创建它的情况下更新axes ?(这是demoBrowser中的方法。M和在下面的评论中列出)。我的问题是,轴有一个'ButtonDownFcn',我想能够重用,所以我不明白为什么我应该删除对象。代码示例如下:

%声明对象
句柄。dp = uix。BoxPanel( 'Tag', 'dataPlot', 'Title', 'Data Plot', 'Parent', handles.gui.leftDataBox);
句柄。plotp = uipanel(“父”,handles.dp);
句柄。Data_plot = axes('Parent',handles.dp,'ButtonDownFcn',@Data_plot_ButtonDownFcn,…);

...%(创建数据);这将正确显示第一次,但不是后续的次数。

次要情节(handles.Data_plot);
plot(data, 'LineWidth', line_thickness);

我尝试用下面的行替换“subplot”命令(基于我在这里读到的注释),但这没有帮助。

集(gcf, CurrentAxes handles.Data_plot);

先谢谢你,艾米

Collin, h(1:n) = uix.HBox(…)创建一个单独的HBox和一个1 × n的句柄数组h,每个元素都指向同一个HBox。如果你想创建多个盒子,那么你需要在一个循环中这么做。

科林

对uix对象数组有困难。
我想做什么;

CNT = 40;
v = uix.VBox('Parent',图);
h(1:cnt) = uix.HBox('Parent',v);
labels(1:cnt) = uicontrol('Style','edit',.....);
values(1:cnt) = uicontrol('Style','edit',....);

对于I = 1:cnt
设置(标签(i),'Parent',h(i),设置其他属性)
set(values(i),'Parent',h(i),设置其他属性)
结束

VBox的contents/ children属性只有一个HBox对象。
在循环中设置Hboxes的父属性似乎不会
工作,而通过循环内部的蛮力设置一切。是
我可以预先分配空对象吗?

科林

Sid

关于2014b后世界中HButtonGroup对象的错误:

我最后使用的一个捷径是在VBox/HBox设置中简单地创建一堆复选框,然后使用一个单独的回调来控制外观和功能。详情如下:

tabpanelMods()函数

关闭所有
H =图();

mainPanel_selectDurationPanel_VBox = ui . hbox(…
“父”,h,…
'BackgroundColor',[0.9375 0.9375 0.9375],…
“填充”,5,…
“间距”,5);


Cb (1) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“字符串”,“天”,…
“回调”,{@bselection h});

Cb (2) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“弦”、“星期”,……
“回调”,{@bselection h});

Cb (3) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“字符串”,“月”,…
“回调”,{@bselection h});

Cb (4) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“字符串”,“6个月”,…
“回调”,{@bselection h});

Cb (5) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“弦”、“1年”,…
“回调”,{@bselection h});


Cb (6) = uicontrol(…
“风格”,“复选框”,…
“父”,mainPanel_selectDurationPanel_VBox,…
“弦”、“所有! !’,……
“回调”,{@bselection h});


函数bselection(source,callbackdata, h)

Cb_name = source。字符串

setappdata (h, DurationName cb_name)

开关cb_name
例“天”
cb(1)。值= 1;
(2)。值= 0;
(3)。值= 0;
cb(4)。值= 0;
(5)。值= 0;
cb(6)。值= 0;

例“星期”
cb(1)。值= 0;
(2)。值= 1;
(3)。值= 0;
cb(4)。值= 0;
(5)。值= 0;
cb(6)。值= 0;

中“月”
cb(1)。值= 0;
(2)。值= 0;
(3)。值= 1;
cb(4)。值= 0;
(5)。值= 0;
cb(6)。值= 0;

个案“6个月”
cb(1)。值= 0;
(2)。值= 0;
(3)。值= 0;
cb(4)。值= 1;
(5)。值= 0;
cb(6)。值= 0;

个案“1年”
cb(1)。值= 0;
(2)。值= 0;
(3)。值= 0;
cb(4)。值= 0;
(5)。值= 1;
cb(6)。值= 0;


例“! !”
cb(1)。值= 0;
(2)。值= 0;
(3)。值= 0;
cb(4)。值= 0;
(5)。值= 0;
cb(6)。值= 1;
结束

希望您可以使用setappdata功能来设置附加信息。
%被其他函数访问。在不同的函数中使用getappdata(h,'DurationName')
获取duration的值,例如最初设置的值。
结束
结束

这是一个非常可怜的人的暴力解决方案,但它有效。正如在示例中所提到的,只需使用setappdata/getappdata功能来提取选择更改。

HTH。

日本胜利公司

在相当长的一段时间里,我一直遇到一个我无法摆脱的错误,不知道是否其他人也有这样的见解。该错误与gui布局图相关,其中包含一个表的元素(通过uitable创建)。所有工作正常,直到我有gui运行,让它“空转”一段时间。出现错误所需的时间是不可预测的,但从~30分钟到几个小时不等。错误流输出了几页消息,我只复制了下面的前几行。除了错误之外,还不清楚这个错误是否会导致其他不好的结果——尽管表的内容通常为空,并且在错误发生后需要刷新,但gui仍会继续工作。我通常根据一般原则重新开始,但不确定这是必要的。对于它的价值,我有非常类似的gui创建的指南,从未显示这种行为。我目前运行的是Win7, R2014B,但错误至少早在2013B。欢迎提出任何建议。

错误消息(~70的前8行)

线程“AWT-EventQueue-0”中的异常
在com.sun.java.swing.plaf.windows.WindowsTableHeaderUI XPDefaultRenderer美元。油漆(未知源)
在javax.swing.CellRendererPane。paintComponent(未知来源)
在javax.swing.plaf.basic.BasicTableUI。paintCell(未知来源)
在javax.swing.plaf.basic.BasicTableUI。paintCells(未知来源)
在javax.swing.plaf.basic.BasicTableUI。油漆(未知源)
在javax.swing.plaf.ComponentUI。更新(未知源)
在javax.swing.JComponent。paintComponent(未知来源)

刘蓓,帮助浏览器冻结是一个已知的MATLAB问题,已经解决了R2015b。

贝刘

伟大的工具箱!
有一个问题:每次我想在Matlab中查看帮助文件时,Matlab就会死机。我不确定是不是我的问题。我使用R2015a

乔纳森Cottet

谢谢你这个很棒的工具箱!

我想能够设置网格的最大高度和最大宽度,VBoxFlex和HBoxFlex。是否可以添加属性MaximumHeights和MaximumWidth来实现这一点(或者是否有其他方法?)

大卫·巴里

神奇的

大卫·桑普森

Eric,不支持R2014b之前的HG2。万博1manbetx在R2014b之前使用,下载GUI布局工具箱版本1;链接在上面的提交说明中。

大卫·桑普森

Carsten,文档浏览器挂起是一个已知的MATLAB问题,R2015b版本正在解决这个问题。

jtrunnels

漂亮的工作。

一个小错误:uix。BoxPaneldoes not work in the 2015b prerelease with non-standard DPI settings.

费尔南多·斯特维斯

卡斯滕•贝奈克

嗨kp

谢谢你的快速回复/提示。但这行不通。

更糟糕的是:当我从命令窗口中启动文档命令并键入选项卡面板时,我看到很多条目。选择第一个会崩溃Matlab (R2015a)!Matlab没有显示任何响应,必须使用任务管理器关闭。

重新启动Matlab后,我得到的消息:

警告:MATLAB工具箱路径缓存已过时,未被使用。
键入'help toolbox_path_cache'获取更多信息

检查显示“启用工具箱路径缓存”仍处于选中状态。

再次,在重新启动Matlab后,我观察到同样的行为。

有人知道如何解决这个问题吗
提前谢谢

kp

我的代码也有类似的问题。我相信在工具箱的最新版本中,该名称已更改为SelectionChangedFcn。示例文件与工具箱之间可能不匹配。

卡斯滕•贝奈克

应用:tabpanelexample

我总是得到错误消息:
使用uix时出错。TabPanel /设置
TabPanel类上没有SelectionChangeCallback属性。

tabpanelexample中的错误(第36行)
set(tabpanel, 'SelectionChangeCallback', @(a,b) set(panellist, 'Value', b. newvalue));

有什么问题(我正在使用Matlab R2015a 32位)?

卡斯滕•贝奈克

应用:tabpanelexample

我总是得到错误消息:
使用uix时出错。TabPanel /设置
TabPanel类上没有SelectionChangeCallback属性。

tabpanelexample中的错误(第36行)
set(tabpanel, 'SelectionChangeCallback', @(a,b) set(panellist, 'Value', b. newvalue));

怎么了?

埃里克

好吧,我知道我在版本灰色地带工作很困难,但我在2014a运行在hg2模式。我在2014a版本(p17)这样做时出错(这是我预期的),我在安装2014b+版本(2.1.2)时遇到了麻烦,因为我没有找到在2014a安装工具箱的方法。有什么建议吗?有人试过吗?等待2015b升级。

大卫·桑普森

>> help uix。TabPanel

从R2014b开始,MATLAB提供了uitabgroup和uitab作为标准组件。考虑使用uitabgroup和uitab的新代码,如果这些满足你的要求。”

如果您的代码必须在r2014b之前运行,或者您需要能够禁用选项卡,那么这将不适合。

大卫·桑普森

对于那些报告问题与TabPanel在独立的应用程序,您可以直接联系我与简单的复制步骤,以便我们可以调查。

Carsten

替换崩溃的tabpanel代码的一种方法:

%使用uitabgroup和uitab(没有崩溃在独立):

TabNames = {'M1', 'U2', 'R3', 'K4', 'P5'};

tabAnalyte = uitabgroup(hbox, 'Tag', 'tabAnalyte', 'SelectionChangedFcn', @(src,evnt)onTabAnalyteSelection(src,evnt, gui.Window));
for i = 1:numel(TabNames)
htab(i) = uitab('Parent', tabAnalyte, 'Title', TabNames{i});
结束

%在“ontabanalytesselection”中
Tab = src.SelectedTab.Title;
switch Tab…结束

使用uiextras。TabPaneland uipanel (CRASHES in standalone):

TabNames = {'M1', 'U2', 'R3', 'K4', 'P5'};

tabAnalyte = uiextras.TabPanel('Parent',hbox,'Tag','tabAnalyte','Callback',@(src,evnt)onTabAnalyteSelection(src,evnt, gui.Window));
for i = 1:numel(TabNames)
htab(i) = uipanel('Parent', tabAnalyte, 'BorderType','none');
结束
tabAnalyte。TabNames = TabNames;
tabAnalyte。TabSize= 120;

%在“ontabanalytesselection”中
Tab = src. tabtitle {evnt.SelectedChild};
switch Tab…结束

塞吉奥Calleja

@Alex,我不知道TabPanel是失败的编译应用程序,所以我想我是幸运的。我使用的是2014b,使用uitab的主要原因是让代码尽可能得到支持,而不是过度使用GUILayout组件万博1manbetx

Mauritz

TabPanel在我编译的应用程序中也失败了-从代码中工作得很好。

亚历克斯Perrone

@Sergio,很高兴知道。基本上,你在所有地方都用uitab而不是TabPanel ?你用uitab而不是TabPanel有什么原因吗?例如,你知道TabPanel是编译应用程序中失败的东西吗?

亚尼克

@Carsten:我已经报告了部署的GUI的同样问题,但由于uitab现在在2014b正式支持,你可以使用直到修复…万博1manbetx(我希望很快?)

Carsten

@Alex Perrone:当我运行一个独立的GUI时,当我更改到(一些)标签时它总是崩溃。

参见我在2015年6月22日发布的Mathworks引文。

我现在正在考虑MatPi…

亚历克斯Perrone

对于一个具有许多组件的独立GUI(几个选项卡,许多嵌套面板/HBox /VBox的,几个图表,一个表等),更改每个选项卡非常“慢”。有什么技巧可以提高切换标签的速度吗?

达尼

我似乎记得在以前的版本中,分隔符标记只在指定相对大小时才显示在Flex对象中。现在他们总是出现。我如何指定Flex对象的一些子对象具有固定的大小?

Carsten

给GUI布局工具箱用户的一个重要提示:

“在独立应用程序中,回调与Java组件(如GUI布局工具箱所使用)的交互方式存在一个错误。在您当前的MATLAB版本(R2015a)中,除了不使用GUI布局工具箱的图形组件外,没有针对这个问题的直接工作区。这个问题应该会在即将发布的R2015b版本中得到解决,该版本的预发布版本已经可以下载了。”

大卫·桑普森

天汉,谢谢你的bug报告,下个版本会修复。

Tianhan

@David Sampson, Bug报告。
ui中有一个小错误(打印错误)。BoxPanel类。根据帮助文档和示例,它有一个名为“is最小化”的属性,但它实际上被命名为“最小化”。因此,当运行'minimizeexample。m',出现错误,表明没有适当的方法、属性或字段' is最小化'用于类'uix.BoxPanel'。

杰森

我已经使用2014b之前构建的工具箱创建了gui,如果我安装这个工具箱的新版本并将Matlab升级到2015a,我将需要通过gui创建代码和更新工具箱调用,还是应该ok?

大卫·桑普森

R2015b MathWorks预发布版现已可用。我们的测试表明TabPanels有问题。我们正在调查。

大卫·桑普森

版本2.1.2包含了一些小的bug修复。

Tianhan

我只是找到一些东西,可以匹配QT,让我在MATLAB中直接做项目原型。谢谢!

伊戈尔

哇,很好,GUI布局是有活力的!

我想报告以下小问题(或…)这是“故意的”吗?)在以下代码中,当创建额外的BoxPanel时,不可见的VButtonBox变得可见:

===================================

Hfigure = figure();

B1 = uix。VBoxFlex( 'Parent', hfigure );
b11 = uix.BoxPanel('Parent',b1,'Title','BoxPanel1');
b111 = uix.VButtonBox('Parent',b11,'Visible','off');
b1111 = uicontrol('Parent',b111,'Style','checkbox','String','invisible checkbox');

B12 = uiextras。BoxPanel('Parent',b1,'Title','By creating this, we also make b1111 visible');

===================================

大卫·桑普森

jvc中,关于支持GUI布局工具箱容器的保存和加载万博1manbetx的研究正在进行中。然而,正常的工作流程是编写代码来创建GUI并每次运行它。

日本胜利公司

为多次发帖道歉-我在提交这条评论时遇到了困难…

我遇到了一个严重的错误时,重新加载数字保存使用代码片段如下所示:

Hfig =图;
vb = uix.HBox('Parent',hfig);
ctr = uicontainer('Parent',vb);

当这段代码的结果图被保存到磁盘,然后重新加载它会导致MATLAB (R2014B, 32位或64位,GUI Layout v2.1, Win7)立即硬崩溃。

有没有其他人遇到过这个问题,或者知道如何更好地解决它?

伊恩

2.1.1版本的更新日志(来自发布说明)

在ui上增加了上下文菜单。TabPaneltab labels (G1245669)
修复G1164656“无法设置相对标签宽度”的问题
修正了G1019441“uiextras的属性rowsize。GridFlex设置高度而不是宽度
修正了G1165274 " uiextras缺少属性RowSizes, MinimumRowSizes, ColumnSizes, MinimumColumnSizes。网格,uiextras。GridFlex”
修正了G1218142“通过子属性重新排序时内容丢失”的问题
当将子对象的可见性从“关闭”设置为“打开”以响应被重父时,可防止G1136196”segv
文档的小修正

噪音

Carsten

GUI布局工具箱真的不支持单选按钮和切换按钮吗?万博1manbetx

我已经下载了uiextras。HButtonGroup,但是当我运行这个例子时:

F =图;
vb = uiextras.VBox('Parent',f);
bgH = uiextras.HButtonGroup('Parent',vb,'Buttons',{'1','2','3'},'Spacing',50,'Padding',10,'SelectedChild',1,'SelectionChangeFcn',@onSelectionChange);

我得到了错误消息:

"使用uiextras.ButtonGroup/set错误。SelectedChild(第84行)
选择的子值1超过控制的子数:0"

有人能帮忙吗?

理查德。

@Tom
如果你改变了

Ax = axes('parent',cp);

ax = axes('parent',uicontainer(' parent', cp));

这可能会解决你的问题。

当您在GUI布局工具箱中为一个轴指定Parent时,它必须在uicontainer中才能正常工作。

塞吉奥Calleja

Carsten

是否有一个简单的方法来创建表与GUI布局工具箱?

有谁能举些例子吗?

亚历克斯·查宾

有人回答过卡斯滕1月7日的问题吗?我也有类似的问题。

谢尔盖·P。

尼尔凯思内斯郡

在使用GUIDE之后使用这个工具箱是一个绝对的乐趣。

亚当Filion

乔纳森

这个工具箱很好。通过“doc uiextras”的文档有点稀缺,一个非常好的介绍(我认为是必读的)可以在工具箱的上一个版本的“layoutHelp/User guide.html”中找到。

伊恩

任何在2014b加载数据时崩溃的人,注意uix对象可能是导致这种情况的原因,确保在保存之前删除任何uix对象。显然,修复工作正在进行中。

布赖恩特

uiextras中的Bug。GridFlex集。RowSizes访问器。它设置宽度而不是高度。

拉斐尔·桑切斯

汤姆

就像我之前说的,非常服从。

我遇到了奇怪的行为与传奇和uix。请参阅下面的示例代码,它将重现该问题。基本上,当发出legend命令时,ui中的轴将消失。

% 2014b -图例重置斧头和斧头和图例不可见。
F =图;
cp = ui . panel ('parent',f);
Ax = axes('parent',cp);
轴(ax)
情节(1:10,1:10);
传奇(“这是传奇”)

% 2014b -图例和斧头显示良好。
F =图;
Cp = uipanel('parent',f);
Ax = axes('parent',cp);
轴(ax)
情节(1:10,1:10);
传奇(“这是传奇”)

jj

伟大的工具箱!

在tabpanelexample中似乎有一个错别字。M,第36行:
SelectionChangeCallback需要是SelectionChangedCallback。

亚当·怀亚特

顶级的!我一直在使用它,祝贺我们快速迁移到R2014b!

文档问题:
停靠/最小化——>停靠/最小化——高级机动部分也需要更改。

DockFcn / MinimizeFcn的调用约定不清楚——即它是否遵循与其他回调相同的方法(即需要两个参数:hObject和callbackdata用于函数句柄调用)?

获取文档很烦人——例如,键入docuix只会弹出类帮助,而不是非常好的文档,所以我不得不加载index.html文件,这有点不方便。

Mauritz

瑞安

TabPanel大小的文档说明如下:
TabPanel。TabSize
但实际上是:
TabPanel。TabWidth

加里

卡斯滕•贝奈克

我尝试运行这个工具箱(R2014b)附带的示例“guideApp”。
然而,我总是得到这样的错误消息:

使用uiextras时出错。容器(第66行)
尝试使用双手柄MATLAB图形在新的图形系统上运行。请重新安装。

uiextras错误。网格(第66行)
obj@uiextras.Container(varargin{:});

uiextras错误。GridFlex(第58行)
obj@uiextras.Grid(varargin{:});

guideApp>guideApp_OpeningFcn错误(第64行)
G = uiextras。GridFlex( 'Parent', handles.uipanel1, ...

gui_mainfcn中的错误(第220行)
函数宏指令(gui_State。gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

guideApp中的错误(第44行)
gui_mainfcn (gui_State变长度输入宗量{:});

使用相同的GUI工具箱(R2014b),但对于matlab版本R2014a,它工作得很好。

我哪里错了?什么是重新安装?

Carsten

杰米

Stephane,我经历过类似的事情,不是完全相同的事情,但我认为它是相关的,修复是使用常规的uipanel。

我用常规的uipanel而不是BoxPanel来尝试你的例子,它不会在调整大小时重置自己。我不能说这是否是BoxPanel中的一个bug,但无论如何,如果它在调整大小时必须不重置自己,使用uipanel可能是一个解决方案。

你也可以在BoxPanel和Grid之间插入一个uipanel来防止子元素的重置,像这样:

图=图(42);clf;
Bp = uiextras。BoxPanel('Parent', fig, 'Title', 'toto');
uip = uipanel('Parent', bp, 'BorderWidth', 0);
G = uiextras。网格('Parent', uip, 'Visible', 'off');
uicontrol(“父”,g);
uicontrol(“父”,g);

希瑟

编辑:我做了更多的测试,我复制的错误如下:1图与TabPanel。TabPanel有两个选项卡;第一个有一个合适的,第二个有两个轴。(如果只有1个轴,就不会发生崩溃。)

希瑟

我有一个使用选项卡的GUI,当从Matlab命令行调用时工作得很好。然而,一旦我编译了它,试图改变制表符会使程序崩溃。这是已知的bug吗?可能不是工具箱的原因,但我想我得检查一下。

公民疯了

从R2013b迁移到R2014b时的另一个小问题。当然,HG2意味着很多变化:)。无论如何,这个工具箱真的是一个必须要设计有吸引力的/现代界面!

这适用于V1(在R2013b)
图=图(42);clf;
Bp = uiextras。BoxPanel('Parent', fig, 'Title', 'toto');
G = uiextras。网格('Parent', bp, 'Visible', 'off');
uicontrol(“父”,g);
uicontrol(“父”,g);

% V2.1 - Rev 1011(在R2014b中)
可见性为“关闭”,直到图形调整大小(可见性突然变为“打开”)
图=图(42);
clf;
Bp = uix。BoxPanel('Parent', fig, 'Title', 'toto');
G = uix。网格('Parent', bp, 'Visible', 'off');
uicontrol(“父”,g);
uicontrol(“父”,g);

罗曼

首先,感谢您提供的这个出色的工具箱

我只是想提交一个错误使用+uix。VButtonBox和+uix。HButtonBox:
有文档说明有一个“Enable”属性,但是设置这个属性我有以下问题:“在VButtonBox类上没有Enable属性”。
对这个问题有什么想法吗?
提前谢谢!

公民疯了

当仍然使用+uiextras时,向后兼容有一些问题。例如,'ColumnSizes/RowSizes'的'set'命令不再被识别,必须从+ui中使用'Widths/Heights'。与'BorderType'相同,必须使用'none',因为'none'不再工作。除此之外,这是一个极好的工具箱。

银行

这真的是文件交换上最好的提交之一!

我一直在浏览代码,我可以看到它最终可以在R2014b中子类化MATLAB uicontrols (uix。v2中的容器继承自matlab.ui.container.internal.UIContainer,而不是像v1中那样是一个包装器)!

然而,每当我对自己的类尝试这种方法时,我得到一个错误,“类‘MyControl’不是类‘matlab.ui.container.internal.UIContainer’的允许子类”。你的类是否在MATLAB中硬编码为允许的子类,而其他的没有??

必杀技

杰米

谢谢你的反馈,我认为这可能有助于人们理解uipanel和uiextras之间的区别。面板,特别是没有设置GLT容器的位置。在需要手动定位的情况下,使用常规的uipanel。下面是一个例子,与我所遇到的困难有关,并演示了David所指的position clobbering:

W =图(75);
G1 = uiextras。GridFlex('Parent', w);

C11 = uiextras。面板('Parent', g1, 'BackgroundColor', [0.95, 0.95, 0.95]);
C12 = uiextras。面板('Parent', g1, 'BackgroundColor', [0.95, 0.95, 0.95]);
C21 = uiextras。面板('Parent', g1, 'BackgroundColor', [0.95, 0.95, 0.95]);
c22 = uipanel('Parent', g1, 'BackgroundColor', [0.95, 0.95, 0.95]);

set(g1,'RowSizes',[-1 -1],'ColumnSizes',[-1 -1]);

X = 0:pi/100:2*pi;
Y = sin(x);

a1 = axes('Parent', c11, 'Units', 'Normalized', 'Position', [.]25, .25, .5, .5]);
情节(x, y);

a2 = axes('Parent', c22, 'Units', 'Normalized', 'Position', [.]25, .25, .5, .5]);
情节(x, y);

Beatriz

我道歉,因为我相信我的问题表明我是一个新手Matlab。

我继续得到这个错误消息时,试图使用ay命令在matlab窗口使用spm 8:

没有在类'matlab.ui.control.UIControl'中找到具有匹配签名的'delete'方法。

使用waitfor错误
在计算UIControl回调时出错

如有任何指导将不胜感激

Carsten

谢谢你,大卫。

它解决了我的问题:

如果use_extra
Vbox = uiextras。VBoxFlex('Parent', window, 'Spacing', 3);
hp1 = uipanel('Parent',vbox);
axes1 = axes('Parent', hp1);
hp2 = uipanel('Parent',vbox);
axes2 = axes('Parent', hp2);
set(vbox, 'Sizes', [-5 -4]);
其他的
Axes1 = subplot(211);
Axes2 = subplot(212);
结束

大卫·桑普森

Carsten,新的图形系统在处理插图(图例,彩色条)和旋转3d方面存在一些问题。挑战在于识别为布局目的而应该忽略的图形对象。我们正在取得进展,但有一些小的变化也需要在MATLAB本身。在此之前,解决方法是在uicontainer(或装饰关闭的uipanel)中放置带有插图的轴和3d旋转轴,如GUI布局工具箱文档中所述。

大卫·桑普森

杰米,你不应该直接设置GLT容器内容的位置。您所做的任何更改都会被工具箱代码破坏。如果您觉得v1和v2之间的布局行为有差异,请直接联系我们,我们将进行调查。

大卫·桑普森

感谢Gary和Jamie发现了一些小bug。这些修复已经实现,将包含在下一个版本中。

加里

看起来dockexample演示中有一个小错误-面板没有。isdocked属性/方法,正确的属性/方法是。docked

亚尼克

你好大卫,

如何将uix对象复制到新的图形中?

我尝试了"copyobj",但子/内容在复制对象中表现不好。

有什么简单的技巧吗?

谢谢!

这个版本的TabPanel和旧版本的TabPanel有区别。tabtitle的垂直对齐现在在顶部。是否可以像旧版本一样将它们对齐在标签的中心?

杰米

抱歉的垃圾邮件,它似乎有一个错误的映射columnsize和rowsize到宽度和高度。它们似乎是向后的,ColumnSizes不起作用。文档中的例子说明了这个问题:

F =图();
G = uiextras。GridFlex( 'Parent', f, 'Spacing', 5 );
uicontrol('Parent', g, 'Background', 'r')
uicontrol('Parent', g, 'Background', 'b')
uicontrol('Parent', g, 'Background', 'g')
uiextras。空( 'Parent', g )
uicontrol('Parent', g, 'Background', 'c')
uicontrol('Parent', g, 'Background', 'y')
集(g,“ColumnSizes”,[1 100 2],“RowSizes”,[1 - 2]);
%适用于以下情况:
%设置(g,“宽度”,[1 100 2],“高度”,[1 - 2]);

杰米

不用管我之前的评论,这种行为在v1和v2之间很常见。特别是:
图();
panel1 = uiextra . panel ();
a1 = axes('Parent', panel1, 'Tag', 'p1');
set(a1, 'Units', 'normalized');
set(a1, 'Position', [0.06 0.13 0.9 0.75]);

我在挣扎的是如何在调整事件中保持规范化的位置?

在v2中有一些布局差异,我试图通过明确指定位置来纠正。

拉尔夫·科尔曼

下面是一个例子,展示了uitabgroup在布局中的使用,还有uitree(有一天它可能会成为“官方的”uicontrol):
在屏幕中心创建图形
scr_size = get(0,'ScreenSize');
Fig_h =图(“菜单条”,“没有”,“名字”,“主GUI图”,…
“OuterPosition”,[scr_size (1:2) + 50 scr_size(3:4) -100],“标签”,“GUI_Fig”);

创建包含根的树控制节点
node1 = uitreenode(“半”,“宝马”、“宝马”,[],假);
node2 = uitreenode(“半”、“奥迪”、“奥迪”,[],假);
node3 = uitreenode('v0', 'VW', 'VW', [], false);
root = uitreenode('v0','German cars','German cars',[],false);
root.add (node1);
root.add (node2);
root.add (node3);

创建树控件
[~, treecontainer] = uitree (Fig_h‘半’,‘父’,‘根’,根);

整理主界面
vertLayout = uix.VBoxFlex('Parent',Fig_h,'Spacing',5);
horzLayout = ui . hboxflex ('Parent',vertLayout,'Spacing',5);
messagePanel = uix.BoxPanel('Parent',vertLayout,'Title','Messages');
treePanel = uix。BoxPanel('Parent',horzLayout,'Title','Object browser');
viewPanel = uix.BoxPanel('Parent',horzLayout,'Title',' views ');
viewContainer = uicontainer('Parent',viewPanel);

调整主布局
messagePanel uicontrol(‘父’,‘风格’,‘编辑’,‘写成Backgroundcolor’,‘w’,……
‘标签’,‘信息’,‘麦克斯’,1000年,“HorizontalAlignment”、“左”,“弦”,“消息1”);
集(treecontainer,‘父’,treePanel);
集(vertLayout,“高度”,[1]4日);
集(horzLayout,“宽度”,[1]);
tabgp = uitabgroup(viewContainer);
tab1 = uitab(tabgp,'Title','View 1');
tab2 = uitab(tabgp,'Title','View 2');

这是GUI设计的一个很好的工具箱!

杰米

我有一个复杂的图形用户界面构建的版本1这个工具箱,在新版本下,它有一个问题。

我已经追查到好像是设备出了问题。坐标轴中的单元被设置为规范化,但当GUI调整大小(或在选择隐藏选项卡时第一次呈现)时,单元被转换为像素,大小是错误的。

我不确定是否相关,但旧版本使用
uiextras.set (gui。窗口中,“DefaultPanelUnits”、“规范化”);
现在显示一个警告。

如果有帮助的话,我可以构造一个简化的例子来展示这种行为。

马库斯

很棒的工具箱,但我有一些开始的问题。有一个例子,我可以使用2014b uitab与此?或者我应该从这个工具箱中选择标签面板?

Jia-Jung

大卫·桑普森

Jonathan,说得好,我会尽快实现对负(相对)TabWidth的支持。万博1manbetx

乔纳森

这是一个优秀的小包,不幸的是,在2014b我不能再设置我的TabPanel TabWidth属性为-1,但必须使用一个正标量,这意味着它不再缩放,因为我拖动我的窗口。有没有简单的解决办法?

汤姆

谢谢你澄清这个大卫-我可以编码它没有问题。我怀疑你的变通方法在大多数情况下都没问题。

大卫·桑普森

Tom,由于实现方面的挑战,我们在这个阶段已经删除了启用/禁用功能,尽管我们愿意进一步改进它。属性“Enable”包含在uiextras包中以支持遗留代码,尽管它不再具有任何效果。万博1manbetx演示“enableexample”应该已经被删除,将在下一个版本中删除。

我鼓励任何使用启用/禁用用例的人联系。具体来说,我感兴趣的情况下,超过set(findall(c, 'Type', 'uicontrol'), 'Enable', v)是需要的。

汤姆

很棒的服从者。只是为了跟上14b和2.1版本的进度。我发现启用的一些问题,因为它没有从面板和框级联下来的孩子。实际上,如果我运行demo enableexample。我在R2014b上,我得到以下错误

> > enableexample
使用uix时出错。BoxPanel /设置
BoxPanel类上没有Enable属性。
enableexample中的错误(第27行)
set(panel, '启用','关闭');

这表明启用没有实现....

大卫·桑普森

David,发布的mltbx文件(1.0)的版本是不正确的,尽管提交的mltbx文件(2.1)的版本是正确的。我们正在调查。这对功能没有影响,但我们希望在发布下次更新之前解决这个问题。

大卫·桑普森

David,你的问题在GUI布局工具箱发行说明的“兼容性考虑”部分的“内容属性”小节中得到了解决:

版本1对象的内容可以通过child属性访问。版本2对象的内容可以通过属性contents访问。版本2的对象还提供了child属性,但该属性控制垂直堆叠顺序,而不是布局顺序。访问child的遗留代码将正常运行,但不会实现布局顺序的预期更改,应该修改它以访问Contents。

即将发布的版本1将包括对通过contents引用内容的代码的支持。万博1manbetx这样,修改后在版本2中工作的代码也将在版本1中工作。

这一变化的背景如下。版本1的对象是内置图形对象的包装器,并通过属性Children以布局顺序呈现内容。版本2对象扩展了内置图形对象,因此继承了属性、方法和事件。其中一个属性是Children,用于控制从上到下的堆叠顺序。MATLAB的堆叠规则,例如控件总是在轴的顶部,这意味着一些合理的布局顺序可能是无效的堆叠顺序,因此需要一个新的布局顺序属性。

大卫·桑普森

Benoit,我们对v1 API进行了检查,并决定如果我们有时间的话,有几件事我们需要更改:名称、形状等。结果是v2 ui,其中提供了用于兼容性的uiextras。我们的建议是:
*使用uix的新代码,只需要从14b起工作
*在旧代码或新代码中使用uiextras,这些新代码必须在14b之前的v1和14b之后的v2中工作

大卫·巴里

大卫,本,

与R2014b之前的版本相比,你在这个版本中颠倒了子元素的顺序。我只在VBox上测试过,但它们的顺序肯定是相反的。因为不好的做法而拒绝我,但是我有一些依赖于顺序的遗留代码,所以你可以想象我有点恼火。

下面的简单示例演示了这个问题。返回的顺序在GLT的版本1中是button1, button2,但在GLT的版本2中是button2, button1。我想这次逆转是有真正的原因的吧?

v = uiextras.VBox;
b1 = uicontrol('Parent', v, 'String', 'Button1');
b2 = uicontrol('Parent', v, 'String', 'Button2');
for ii = 1:numel(v.Children)
disp (get (v.Children (ii), '字符串'));
结束

布赖恩特

谢谢你这么快就搞定了!

大卫·巴里

大卫,本,

工具箱包中包含的版本信息将此报告为版本1.0而不是2.x

Benoit波顿

谢谢你,大卫,

我的工作是使用HBox, uicontainer更优雅,更容易实现。

到目前为止,向后兼容性看起来非常好。从uiextras更新旧代码有什么好处吗?uix。?

大卫·桑普森

目前很难支持两种情况下布置轴线:万博1manbetx
(1)带插图的轴(图例,颜色条)
(2)三维旋转轴

解决方法是将这些轴放置在GUI布局工具箱容器的uicontainer中(在下面的代码中c1和c2):

F =图();
B = uix。HBox( 'Parent', f );
c1 = uicontainer('Parent', b);
a1 = axes('Parent', c1);
[x, y, z] =峰值(15);
Surf (a1, x, y, z)
c2 = uicontainer('Parent', b);
a2 = axes('Parent', c2);
Surf (a2, y, x, z)
Rotate3d (f, 'on')

我们正在与我们的同事一起开发,以消除对中间容器的需求。

尽管文档中提到了这个问题,但我们将在即将发布的版本中更显著地强调已知的限制。

Benoit波顿

大卫,本,
非常感谢您的辛勤工作。

激活rotate3d时,在面板内绘制的3d图形将消失:

f =图;
axPanel = uiextras。面板(“父”,f);
hAxes = axes('Parent', axPanel);
[X,Y] = meshgrid(-2:.]2:2, 2: .2:2);
Z = X. * exp(-X。^2 - y .^2);
冲浪(X, Y, Z)
rotate3d上

这在v1版本2013b下工作得很好

达尼

在v1中,uiextras对象似乎继承了uipanels的默认背景色,这可以通过例如。
set(0, 'DefaultUipanelBackgroundColor', 'r')
如何在v2中达到同样的效果?

本Tordoff

嗨,伊恩,谢谢你发现了这个问题——我已经为下次更新修复了它。该文档仍在进行中,但如果您发现了其他错误,请告诉我们(如果您不想公开所有发现,您可以直接联系我们)。

伊恩

嗨,只是一个提醒,如果你想把你的uiextras切换到uix,几个属性已经改变了,但文档还不是最新的(例如TabPanel>TabSize属性等),所以检查类文件本身的属性名称。