27

我正在做一个关于盒子布局的 PyQt4 教程。但我不明白如何addStretch工作。

  • 如果我使用vbox.addStretch(1)and hbox.addStretch(1),这两个按钮会出现在右下方。为什么?
  • 如果我评论vbox.addStretch(1)hbox.addStretch(1)退出,这两个按钮会出现在我的窗口中心,它们可以水平变形,但不能垂直变形。为什么?
  • 如果我改变值“1”没有区别......那么这个值有什么作用?

下面是我正在使用的代码:

import sys
from PyQt4 import QtGui

class BoxLayout(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('box layout')

        ok = QtGui.QPushButton("OK")
        cancel = QtGui.QPushButton("Cancel")

        vbox = QtGui.QHBoxLayout()
        vbox.addStretch(1)
        vbox.addWidget(ok)
        vbox.addWidget(cancel)

        hbox = QtGui.QVBoxLayout()
        hbox.addStretch(1)
        hbox.addLayout(vbox)

        self.setLayout(hbox)

        self.resize(100, 100)

app = QtGui.QApplication(sys.argv)
qb = BoxLayout()
qb.show()
sys.exit(app.exec_())
4

1 回答 1

44

addStretch方法将QSpacerItem添加到框布局的末尾。QSpacerItem 是一个可调整的空白区域。

  1. 使用vbox.addStretch(1)将添加一个从布局顶部向下垂直扩展的零宽度间隔项。

    使用hbox.addStretch(1)将添加一个从布局左侧向右水平扩展的零高度间隔项。

  2. 如果没有拉伸,布局将由小部件的 sizePolicy确定 。对于 QPushButton, 垂直尺寸 为QSizePolicy.Fixed ,水平尺寸为QSizePolicy.Minimum 。如果您希望按钮在两个方向上展开,您可以执行以下操作:

        ok.setSizePolicy(QtGui.QSizePolicy.Minimum,
                         QtGui.QSizePolicy.Minimum)
        cancel.setSizePolicy(QtGui.QSizePolicy.Minimum,
                             QtGui.QSizePolicy.Minimum)
    
  3. 传递给 addStretch 的参数改变了拉伸因子。如果在确定按钮后添加第二个拉伸:

        vbox = QtGui.QHBoxLayout()
        vbox.addStretch(1)
        vbox.addWidget(ok)
        vbox.addStretch(2)
        vbox.addWidget(cancel)
    

    您会看到第二个间隔项的增长速度是第一个的两倍。如果你将第一个拉伸设置为零,它根本不会增长。

如果您想了解更多信息,请参阅 Qt 文档中的布局管理文章。使用Qt Designer来试验这样的东西也是一个好主意,因为它可以为您提供即时的视觉反馈,并向您显示所涉及的各种属性的所有默认值。

于 2013-12-08T19:28:45.827 回答