Как спозиционировать виджеты в BoxLayout?
Есть 3 виджета в QHBoxLayout, в середине виджет с динамическим содержанием, и его надо растягивать на всю длину, а остальные два должны отображаться по контенту там.
Как это возможно реализовать?
Пробовал с использованием addStretch() и setMaximumWidth() для крайних виджетов, но не привело к нужному результату.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Вы должны установить коэффициент растяжения при добавлении центрального макета:
...
self.qhboxlayout.addLayout(center_voboxlayout, stretch=1) # <-----
...
import sys
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
tableWidget = QTableWidget(15, 5)
time_label = QLabel("Time")
self.clocktime = QTimeEdit()
date_label = QLabel("Date")
self.date_time = QDateEdit()
combo_label = QLabel("ComboBox")
comboBox = QComboBox()
comboBox.addItems(['item1', 'item2', 'item3', 'item4', ])
line_label = QLabel("LineEdit")
lineEdit = QLineEdit()
self.button_1 = QPushButton("Button 1")
self.button_2 = QPushButton("Button 2")
self.button_2 = QPushButton("Button 3")
left_vboxlayout = QVBoxLayout()
left_vboxlayout.addStretch(1)
left_vboxlayout.addWidget(time_label)
left_vboxlayout.addWidget(self.clocktime)
left_vboxlayout.addWidget(date_label)
left_vboxlayout.addWidget(self.date_time)
left_vboxlayout.addWidget(combo_label)
left_vboxlayout.addWidget(comboBox)
left_vboxlayout.addWidget(line_label)
left_vboxlayout.addWidget(lineEdit)
center_voboxlayout = QVBoxLayout()
center_voboxlayout.addWidget(tableWidget)
rightvboxlayout = QVBoxLayout()
rightvboxlayout.addStretch(1)
rightvboxlayout.addWidget(self.button_1)
rightvboxlayout.addWidget(self.button_2)
rightvboxlayout.addWidget(self.button_2)
# main layout
self.qhboxlayout = QHBoxLayout(self)
self.qhboxlayout.addLayout(left_vboxlayout)
self.qhboxlayout.addLayout(center_voboxlayout, stretch=1) # <-----
self.qhboxlayout.addLayout(rightvboxlayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
