我正在做一个关于盒子布局的 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 是一个可调整的空白空间。
使用
vbox.addStretch(1)
将添加一个零宽度的分隔项 从布局顶部垂直向下扩展。使用
hbox.addStretch(1)
将添加一个高度为零的分隔项 从布局的左侧向右水平扩展。不拉伸(stretch),布局将由 sizePolicy 的小部件。对于 QPushButton,这是 QSizePolicy.Fixed 对于垂直尺寸,和 QSizePolicy.Minimum 对于水平尺寸。如果您希望按钮展开 两个方向,你可以这样做:
ok.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) cancel.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
传递给 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/