简体   繁体   English

PyQt4:连接分离器

[英]PyQt4 : Connect splitter

I want to connect splitters to make a "cross" splitters between 4 widgets.我想连接拆分器以在 4 个小部件之间制作“交叉”拆分器。 I tried to do it using signal and slot between two splitters, and even if no errors occured, the behavior is not the one I hope (in fact nothing happens).我尝试使用两个分离器之间的信号和插槽来做到这一点,即使没有发生错误,行为也不是我希望的(实际上什么也没发生)。

import sys
from PyQt4 import QtGui, QtCore

class ApplicationWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.initUI()

        self.window.setFocus()
        self.setCentralWidget(self.window)
        self.showMaximized()

    def initUI(self) :
        self.window = QtGui.QWidget()

        self.editor1 = QtGui.QTextEdit()
        self.editor2 = QtGui.QTextEdit()
        self.editor3 = QtGui.QTextEdit()
        self.editor4 = QtGui.QTextEdit()

        self.split1 = QtGui.QSplitter()
        self.split2 = QtGui.QSplitter()
        self.split3 = QtGui.QSplitter()
        self.split2.setOrientation(QtCore.Qt.Vertical)
        self.split3.setOrientation(QtCore.Qt.Vertical)

        self.split2.addWidget(self.editor1)
        self.split2.addWidget(self.editor2)
        self.split3.addWidget(self.editor3)
        self.split3.addWidget(self.editor4)

        self.connect(self.split2, QtCore.SIGNAL("splitterMoved"), self.split3.moveSplitter)
        self.connect(self.split3, QtCore.SIGNAL("splitterMoved"), self.split2.moveSplitter)

        self.split1.addWidget(self.split2)
        self.split1.addWidget(self.split3)

        self.layout = QtGui.QHBoxLayout()
        self.layout.addWidget(self.split1)
        self.window.setLayout(self.layout)

def main() :
    qApp = QtGui.QApplication(sys.argv)
    qApp.setStyle('cleanlooks')
    aw = ApplicationWindow()
    aw.show()
    sys.exit(qApp.exec_())

if __name__ == '__main__':
    main()

Any ideas ?有任何想法吗 ?

Ok finally I found how to do that using python :好的,我终于找到了如何使用 python 做到这一点:

import sys
from PyQt4 import QtGui, QtCore

class ApplicationWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle("Cluster View")
        self.initUI()

        self.window.setFocus()
        self.setCentralWidget(self.window)
        self.showMaximized()

    def splitterMoved(self, sender) :
        print ("ok", sender)
        receiver = self.split2 if sender is self.split3 else self.split3
        receiver.blockSignals(True)
        receiver.setSizes(sender.sizes())
        receiver.blockSignals(False)

    def initUI(self) :
        self.window = QtGui.QWidget()

        self.editor1 = QtGui.QTextEdit()
        self.editor2 = QtGui.QTextEdit()
        self.editor3 = QtGui.QTextEdit()
        self.editor4 = QtGui.QTextEdit()

        self.split1 = QtGui.QSplitter()
        self.split2 = QtGui.QSplitter()
        self.split3 = QtGui.QSplitter()
        self.split2.setOrientation(QtCore.Qt.Vertical)
        self.split3.setOrientation(QtCore.Qt.Vertical)

        self.split2.addWidget(self.editor1)
        self.split2.addWidget(self.editor2)
        self.split3.addWidget(self.editor3)
        self.split3.addWidget(self.editor4)

        self.connect(self.split2, QtCore.SIGNAL("splitterMoved(int, int)"), lambda x : self.splitterMoved(self.split2))
        self.connect(self.split3, QtCore.SIGNAL("splitterMoved(int, int)"), lambda x : self.splitterMoved(self.split3))

        self.split1.addWidget(self.split2)
        self.split1.addWidget(self.split3)

        self.layout = QtGui.QHBoxLayout()
        self.layout.addWidget(self.split1)
        self.window.setLayout(self.layout)

def main() :
    qApp = QtGui.QApplication(sys.argv)
    qApp.setStyle('cleanlooks')
    aw = ApplicationWindow()
    aw.show()
    sys.exit(qApp.exec_())

if __name__ == '__main__':
    main()

Maybe there are better way to do that, but at least it works now.也许有更好的方法来做到这一点,但至少它现在有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM