我正在做有关框布局的PyQt4教程。但我不了解addStretch
的工作原理。
vbox.addStretch(1)
和hbox.addStretch(1)
,则两个按钮显示在右下方。为什么? vbox.addStretch(1)
和hbox.addStretch(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是可调整的空白。
使用vbox.addStretch(1)
将添加一个零宽度的间隔项,该间隔项从布局的顶部向下垂直扩展。
使用hbox.addStretch(1)
将添加一个零高度的分隔项,从布局的左侧向右水平扩展。
没有拉伸,布局将由sizePolicy的小部件。对于QPushButton,这是QSizePolicy.Fixed垂直尺寸,以及QSizePolicy.Minimum用于水平尺寸。如果您希望按钮在其中展开双向,您可以执行以下操作:
ok.setSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Minimum)
cancel.setSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Minimum)
传递给addStretch的参数更改了拉伸因子。如果你在“确定”按钮之后添加第二个拉伸:
vbox = QtGui.QHBoxLayout()
vbox.addStretch(1)
vbox.addWidget(ok)
vbox.addStretch(2)
vbox.addWidget(cancel)
您会看到第二个间隔项的增长速度是第一。而且,如果您将第一个拉伸长度设为零,则不会在全部。
如果需要更多信息,请参阅Qt文档中的Layout Management文章。使用Qt Designer进行类似的实验也是一个好主意,因为它可以为您提供即时的视觉反馈,并向您显示所涉及的各种属性的所有默认值。