addStretch在QBoxLayout中究竟是如何工作的?

2024-04-29 15:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 如果我使用vbox.addStretch(1)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_())

Tags: importselfinitsysok按钮parentpyqt4
1条回答
网友
1楼 · 发布于 2024-04-29 15:14:53

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文档中的Layout Management文章。使用Qt Designer来尝试类似的东西也是一个好主意,因为它可以立即提供视觉反馈,并显示所涉及的各种属性的所有默认值。

相关问题 更多 >