¿Cómo puedo hacer que un widget de PyQt se pueda cambiar de tamaño arrastrando?

Tengo un QScrollArea que contiene un widget con un QVBoxLayout. Dentro de este diseño hay varios otros widgets. Quiero que el usuario pueda arrastrar los bordes inferiores de esos widgets para redimensionarlos en la dirección vertical. Cuando se redimensionen, no quiero que “roben” el tamaño de los otros widgets en el área de desplazamiento; en lugar de eso quiero que toda la “página” desplazada cambie su tamaño. Por lo tanto, si amplía uno de los widgets, debería empujar los otros widgets hacia abajo (fuera de la ventana gráfica del área de desplazamiento); Si lo encoges, debería subir los otros widgets. Arrastrar el borde de un widget no debe cambiar el tamaño de ninguno de los otros widgets en el desplazamiento vertical; sólo debería moverlos.

Comencé usando un QSplitter. Si uso eso, puedo arrastrar para cambiar el tamaño de un widget, pero no parece haber una manera de “empujar / jalar” a los demás como describí anteriormente, en lugar de boostlos / reducirlos. Pero no puedo encontrar otra manera de darle a un widget un controlador que se pueda arrastrar y que me permita cambiar su tamaño. ¿Cómo puedo lograr esto?

Aquí hay un ejemplo simple de lo que estoy haciendo. (En este ejemplo, he comentado el separador, pero si lo descomprime, puede ver qué sucede con esa versión).

import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.Qsci import QsciScintilla, QsciLexerPython class SimplePythonEditor(QsciScintilla): def __init__(self, parent=None): super(SimplePythonEditor, self).__init__(parent) self.setMinimumHeight(50) class Chunk(QFrame): def __init__(self, parent=None): super(Chunk, self).__init__(parent) layout = QVBoxLayout(self) sash = QSplitter(self) layout.addWidget(sash) sash.setOrientation(Qt.Vertical) editor = self.editor = SimplePythonEditor() output = self.output = SimplePythonEditor() output.setReadOnly(True) sash.addWidget(editor) sash.addWidget(output) self.setLayout(layout) print(self.sizePolicy()) class Widget(QWidget): def __init__(self, parent= None): global inout super(Widget, self).__init__() #Container Widget widget = QWidget() #Layout of Container Widget layout = QVBoxLayout(self) #sash = QSplitter(self) #layout.addWidget(sash) #sash.setOrientation(Qt.Vertical) for num in range(5): editor = SimplePythonEditor() editor.setText("Some stuff {}".format(num)) layout.addWidget(editor) #sash.addWidget(editor) widget.setLayout(layout) #Scroll Area Properties scroll = QScrollArea() scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setWidgetResizable(True) scroll.setWidget(widget) scroll.setMaximumHeight(500) #Scroll Area Layer add vLayout = QVBoxLayout(self) vLayout.addWidget(scroll) self.setLayout(vLayout) if __name__ == '__main__': app = QApplication(sys.argv) dialog = Widget() dialog.show() app.exec_()