问题描述
我试图将最后 2 个小部件(btn1、btn2)与 vBox 布局中的其余小部件分开。我将 insertSpacing 与下面小部件的索引一起使用,但它会将两个小部件向下移动 500。如何将 btn1 向下移动 20 并将 btn2 向下移动 500 ?
filter_layout = QVBoxLayout()
data_filters = [label1,combo1,label2,combo2,label3,combo3,label4,combo4,label5,combo5,btn1,btn2]
[filter_layout.addWidget(wg) for wg in data_filters]
filter_layout.insertSpacing(10,20)
filter_layout.insertSpacing(11,500)
filter_layout.addStretch()
解决方法
Qt 布局管理器使用名为 QLayoutItem 的抽象项来表示由布局管理的元素。
这些项目通常包含小部件,但它们也可以包含其他布局或间隔 (QSpacerItem)。
在您的情况下,当您调用以下行时会发生什么:
filter_layout.insertSpacing(10,20)
您在索引 10 和 11 的元素之间插入了一个间隔项,因此下一次插入实际上是在您添加的那个间隔之后,因为这就像您在最后两个元素之间添加了一个空小部件。
正如您可能已经想到的那样,了解所有这些之后,很容易找到解决方案:您可以设置下一个对索引插入进行计数的间隔,或者反转插入顺序。
filter_layout.insertSpacing(10,20)
filter_layout.insertSpacing(12,500)
# or,alternatively:
filter_layout.insertSpacing(11,500)
filter_layout.insertSpacing(10,20)