Код: Выделить всё
from PySide6.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QSizePolicy, QFrame, QVBoxLayout, QSpinBox
class TestWindow(QMainWindow):
def __init__(self):
super().__init__()
frame = QFrame()
parent_layout = QVBoxLayout()
self.label_frame = QFrame()
self.label_layout = QHBoxLayout()
self.container1 = QFrame()
self.container1.setStyleSheet('QFrame {background-color: red}')
self.container1SP = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.container1SP.setHorizontalStretch(1)
self.container1.setSizePolicy(self.container1SP)
self.container2 = QFrame()
self.container2.setStyleSheet('QFrame {background-color: green}')
self.container2SP = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.container2SP.setHorizontalStretch(5)
self.container2.setSizePolicy(self.container2SP)
self.label_layout.addWidget(self.container1)
self.label_layout.addWidget(self.container2)
self.label_frame.setLayout(self.label_layout)
parent_layout.addWidget(self.label_frame)
edit = QSpinBox(minimum=1, maximum=5, value=1)
edit.valueChanged.connect(self.change)
parent_layout.addWidget(edit)
frame.setLayout(parent_layout)
self.setCentralWidget(frame)
def change(self, value):
self.container1SP.setHorizontalStretch(1)
self.container2SP.setHorizontalStretch(value)
self.container1.adjustSize()
self.container2.adjustSize()
app = QApplication([])
window = TestWindow()
window.show()
app.exec()
Я пробовал вызвать методjustSize для родительского виджета self.label_frame, но это приводит к тому, что оба контейнера по какой-то причине исчезают.
Отдельный вопрос: почему игнорируется коэффициент растяжения, когда он меньше 1? Я ожидаю, что два родственных виджета с коэффициентами растяжения 0,5 и 1 будут вести себя так же, как два виджета с коэффициентами растяжения 1 и 2.
Подробнее здесь: https://stackoverflow.com/questions/798 ... hboxlayout
Мобильная версия