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

标签 python python-3.x layout pyqt

我正在做一个关于盒子布局的 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_())

最佳答案

addStretch方法添加了 QSpacerItem到盒子布局的末尾。 QSpacerItem 是一个可调整的空白空间。

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

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

  2. 不拉伸(stretch),布局将由 sizePolicy 的小部件。对于 QPushButton,这是 QSizePolicy.Fixed 对于垂直尺寸,和 QSizePolicy.Minimum 对于水平尺寸。如果您希望按钮展开 两个方向,你可以这样做:

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

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

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

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

关于python - addStretch 在 QBoxLayout 中究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20452754/

相关文章:

python - 如何正确处理 simplejson 错误?

python - PyQT4改变qDateTimeEdit时间值?

python - 使用 Itertools 从多个列表中创建元素组合列表

android - 我该如何着手制作这个布局?遇到这么多麻烦

python - 运行函数时显示 ttk 进度条(python)

python - 以递归方式使用 Yield

python - 如何读取 zip 文件中的文本文件?

python - 根据 YAML 文件中的用户输入将自定义字段添加到 JSON 文件 - Python3

html - 使包含多列元素的 div 容器扩展到列的宽度

android - 更改 fragment 中 LinearLayout 的权重 - Android Studio