Ответ 1
Метод addStretch добавляет QSpacerItem в конец макета блока. QSpacerItem - это настраиваемое пустое пространство.
-
Использование
vbox.addStretch(1)
добавит элемент распорки нулевой ширины, который расширяется вертикально от вершины макета вниз.Использование
hbox.addStretch(1)
добавит элемент распорки нулевой высоты, который расширяется по горизонтали слева от макета вправо. -
Без растяжения макет будет определяться размеромPolicy виджетов. Для 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. Также было бы неплохо использовать Qt Designer для экспериментов с подобными вещами, так как он дает вам немедленную визуальную обратную связь и показывает все значения по умолчанию для различных задействованных свойств.