Code: Select all
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()
Ich habe versucht, „adjustSize“ im übergeordneten Widget „self.label_frame“ aufzurufen, aber das führt aus irgendeinem Grund dazu, dass beide Container verschwinden.
Als separate Frage: Warum wird der Streckungsfaktor ignoriert, wenn er kleiner als 1 ist? Ich würde erwarten, dass sich zwei Geschwister-Widgets mit den Streckungsfaktoren 0,5 und 1 genauso verhalten würden wie zwei Widgets mit den Streckungsfaktoren 1 und 2.
Mobile version