Sie könnten Unterklasse QSplitter
und Reimplementierung seiner createHandle Methode. Dies würde es Ihnen ermöglichen, eine Instanz Ihrer eigenen QSplitterHandle Klasse zurückzugeben, mit, sagen wir, eine neu implementierte paintEvent
.
Alternativ und einfacher können Sie Schaltflächen direkt zu einem vorhandenen Splitter-Handle hinzufügen, indem Sie ein eigenes Layout festlegen.
Hier ist eine grundlegende Demo Sie beginnen (wahrscheinlich einige Optimierungen muss es schönere machen):
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.splitter = QtGui.QSplitter(self)
self.splitter.addWidget(QtGui.QTextEdit(self))
self.splitter.addWidget(QtGui.QTextEdit(self))
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.splitter)
handle = self.splitter.handle(1)
layout = QtGui.QVBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
button = QtGui.QToolButton(handle)
button.setArrowType(QtCore.Qt.LeftArrow)
button.clicked.connect(
lambda: self.handleSplitterButton(True))
layout.addWidget(button)
button = QtGui.QToolButton(handle)
button.setArrowType(QtCore.Qt.RightArrow)
button.clicked.connect(
lambda: self.handleSplitterButton(False))
layout.addWidget(button)
handle.setLayout(layout)
def handleSplitterButton(self, left=True):
if not all(self.splitter.sizes()):
self.splitter.setSizes([1, 1])
elif left:
self.splitter.setSizes([0, 1])
else:
self.splitter.setSizes([1, 0])
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 300)
window.show()
sys.exit(app.exec_())
Du bist wirklich ein qt Ninja. Ich habe keine Ahnung, dass man ein Layout mit zusätzlichen Buttons in ein bestehendes Handle zwingen kann und ohne setContentsMargins (0,0,0,0) wird nichts angezeigt. Danke nochmal – user178047