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

  发布于 2023-02-12 11:13

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

ekhumoro.. 30

该addStretch方法增加了一个QSpacerItem到框布局的端部.QSpacerItem是可调节的空白区域.

    使用vbox.addStretch(1)将添加一个零宽度的spacer-item,它从布局的顶部向下垂直扩展.

    使用hbox.addStretch(1)将添加一个零高度的spacer-item,从布局的左侧向右水平扩展.

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

        ok.setSizePolicy(QtGui.QSizePolicy.Minimum,
                         QtGui.QSizePolicy.Minimum)
        cancel.setSizePolicy(QtGui.QSizePolicy.Minimum,
                             QtGui.QSizePolicy.Minimum)
    

    传递给addStretch的参数会更改拉伸因子.如果在ok按钮后添加第二个拉伸:

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

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

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

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有