Как задать конкретное расстояние между двумя виджетами в QHBoxLayout?
Мой код создает вертикальный контейнер v_box, он является главным контейнером окна и содержит в себе горизонтальный контейнер h_box, который я покрасил в желтый цвет.
Контейнер h_box содержит три виджета:
- Надпись
label_1, - Кнопка
btn, - Надпись
label_2.
Надпись label_1 прижата к левому краю h_box и должна оставаться там всегда.
Надпись label_2 прижата к правому краю h_box и должна оставаться там всегда.
Кнопка btn сейчас не имеет конкретного местоположения и я хочу это исправить. На картинке ниже показал расстояние между label_1 и btn - d.
Мне нужно задать конкретную и постоянную величину этого расстояния в пикселях. Пожалуйста, подскажите как мне это сделать?
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
v_box = QtWidgets.QVBoxLayout(self)
box = QtWidgets.QWidget()
box.setStyleSheet(box_qss)
box.setFixedHeight(50)
h_box = QtWidgets.QHBoxLayout(box)
v_box.addWidget(box)
label_1 = QtWidgets.QLabel('label_1')
h_box.addWidget(label_1)
btn = QtWidgets.QPushButton('btn')
btn.setStyleSheet(btn_qss)
btn.setFixedSize(40, 30)
h_box.addWidget(btn, alignment = QtCore.Qt.AlignLeft)
label_2 = QtWidgets.QLabel('label_2')
h_box.addWidget(label_2, alignment = QtCore.Qt.AlignRight)
box_qss = '''QWidget {
background-color: yellow;
border-radius: 5px;
}'''
btn_qss = '''QWidget {
background-color: white;
border-radius: 5px;
}'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
void QBoxLayout::addSpacing(int size)
Добавляет нерастяжимое пространство (QSpacerItem) с размером size в конец этого макета блока. QBoxLayout предоставляет поля и интервалы по умолчанию. Эта функция добавляет дополнительное пространство.
void QBoxLayout::addStretch(int stretch = 0)
Добавляет растягиваемое пространство (QSpacerItem) с нулевым минимальным размером и коэффициентом растяжения до конца этого макета блока.
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
v_box = QtWidgets.QVBoxLayout(self)
box = QtWidgets.QWidget()
box.setStyleSheet(box_qss)
box.setFixedHeight(50)
h_box = QtWidgets.QHBoxLayout(box)
v_box.addWidget(box)
label_1 = QtWidgets.QLabel('label_1')
h_box.addWidget(label_1)
h_box.addSpacing(30) # +++
btn = QtWidgets.QPushButton('btn')
btn.setStyleSheet(btn_qss)
btn.setFixedSize(40, 30)
h_box.addWidget(btn) #, alignment = QtCore.Qt.AlignLeft)
h_box.addStretch(1) # +++
label_2 = QtWidgets.QLabel('label_2')
h_box.addWidget(label_2, alignment = QtCore.Qt.AlignRight)
box_qss = '''QWidget {
background-color: yellow;
border-radius: 5px;
}'''
btn_qss = '''QWidget {
background-color: white;
border-radius: 5px;
}'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())

