So passen Sie Streckungsfaktoren in QHBoxLayout programmgesteuert anPython

Python-Programme
Anonymous
 So passen Sie Streckungsfaktoren in QHBoxLayout programmgesteuert an

Post by Anonymous »

Ich habe ein QHBoxLayout mit zwei Elementen, deren Breitenproportionen ich durch den Benutzer anpassbar machen möchte. Konkret möchte ich eine QSpinBox haben, die den Streckungsfaktor auf eines der beiden Elemente anwendet.

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()
Das Problem, mit dem ich konfrontiert bin, besteht darin, dass sich die Breite der beiden Container nicht ändert, wenn ihre Streckungsfaktoren angepasst werden, selbst wenn ich „adjustSize“ für beide aufrufe.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post