Как именно addStretch работает в QBoxLayout?
Я делаю PyQt4 учебник о макетах коробки. Но я не понимаю как!--1--> строительство.
- если я использую
vbox.addStretch(1)
иhbox.addStretch(1)
, две кнопки появляются вниз-вправо. Почему? - если я комментарий
vbox.addStretch(1)
иhbox.addStretch(1)
out, две кнопки появляются в центре моего окна, и они деформируются горизонтально, но не вертикально. Почему? - нет никакой разницы, если я изменю значение "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_())
1 ответов
на addStretch метод добавляет QSpacerItem до конца макета коробки. QSpacerItem-это регулируемое пустое пространство.
-
используя
vbox.addStretch(1)
добавит прокладку нулевой ширины-элемент, который расширяется вертикально от верхней части макета вниз.используя
hbox.addStretch(1)
добавит прокладку нулевой ширины-элемент, который расширяется по горизонтали слева от макета вправо. -
без растяжки, макет будет определяться sizePolicy виджетов. Для QPushButton это QSizePolicy.Исправлено для вертикального измерения, и QSizePolicy.Минимум для горизонтального измерения. Если вы хотите, чтобы кнопки расширялись в в обоих направлениях вы можете сделать что-то вроде этого:
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 экспериментировать с подобным, как это дает вам визуальную обратную связь и показывает все значения по умолчанию различных свойства участвует.