pyqt qt4如何向QSplitter添加一个小箭头/折叠按钮

use*_*047 10 qt qt4 pyqt qsplitter pyqt4

您可以自定义分割器手柄的厚度和背景图像

http://qt-project.org/doc/qt-4.8/stylesheet-examples.html#customizing-qsplitter

但是有没有办法添加一个小的图形箭头按钮,所以当用户点击它时,我可以调用splitter.setSizes([0, 1])它来折叠它.

collapsebutton

我可以使用带有QButton的vbox布局,但它占用太多空间并且看起来不太好.

ekh*_*oro 11

您可以子类化QSplitter并重新实现其createHandle方法.这将允许您返回自己的QSplitterHandle类的实例,例如,重新实现paintEvent.

或者,更简单地说,您可以通过在其上设置自己的布局,将按钮直接添加到现有拆分器手柄.

这是一个让你入门的基本演示(可能需要一些调整才能让它更漂亮):

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_())
Run Code Online (Sandbox Code Playgroud)

  • 你是一个真正的qt忍者.我不知道你可以强加一个带有额外按钮的布局到现有的句柄中,没有setContentsMargins(0,0,0,0)什么都不会显示.再次感谢 (2认同)