【问题标题】:PyQt4 : Connect splitterPyQt4:连接分离器
【发布时间】:2017-01-23 15:43:10
【问题描述】:

我想连接拆分器以在 4 个小部件之间创建一个“交叉”拆分器。我尝试在两个分离器之间使用信号和槽来做到这一点,即使没有发生错误,行为也不是我希望的(实际上什么也没发生)。

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()

有什么想法吗?

【问题讨论】:

标签: python python-2.7 pyqt pyqt4


【解决方案1】:

好吧,我终于找到了如何使用 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()

也许有更好的方法可以做到这一点,但至少现在可以了。

【讨论】:

  • 这看起来很可靠,并且通过发送两个int 与信号来完成我之前提到的几乎所有事情。干得好;)。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2016-11-02
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多