pyqt:在堆叠的qdoc​​kwidgets一侧停靠

时间:2012-10-31 05:10:13

标签: pyqt qdockwidget

multi dock

我做了一个多码头窗口。为此,我隐藏了中央小部件,我得到了它。但我有一个问题(或者更多的事情可能?)。如果底座小部件堆叠在另一个顶部,我无法将它们停靠在它们的一侧。如上图所示,我只需要在码头之间停靠。我该怎么调整呢?这就是我的整个代码。

from PyQt4 import QtCore, QtGui

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)        
        self.resize(800, 600)
        self.setWindowTitle(QtGui.QApplication.translate("self", "self", None, QtGui.QApplication.UnicodeUTF8))
        self.setDockOptions(QtGui.QMainWindow.AnimatedDocks)
        self.centralwidget = QtGui.QWidget(self)
        self.centralwidget.hide()
        self.setCentralWidget(self.centralwidget)        
        self.menubar = QtGui.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(self)
        self.setStatusBar(self.statusbar)
        self.dock1Widget = QtGui.QDockWidget(self)
        self.dock1Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures)
        self.dock1Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock1", None, QtGui.QApplication.UnicodeUTF8))
        self.dock1WidgetContents = QtGui.QWidget()
        self.dock1Widget.setWidget(self.dock1WidgetContents)
        self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock1Widget)
        self.dock2Widget = QtGui.QDockWidget(self)
        self.dock2Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures)
        self.dock2Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock2", None, QtGui.QApplication.UnicodeUTF8))
        self.dock2WidgetContents = QtGui.QWidget()
        self.dock2Widget.setWidget(self.dock2WidgetContents)
        self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock2Widget)
        self.dock3Widget = QtGui.QDockWidget(self)
        self.dock3Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures)
        self.dock3Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock3", None, QtGui.QApplication.UnicodeUTF8))
        self.dock3WidgetContents = QtGui.QWidget()
        self.dock3Widget.setWidget(self.dock3WidgetContents)
        self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock3Widget)
        self.dock4Widget = QtGui.QDockWidget(self)
        self.dock4Widget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures)
        self.dock4Widget.setWindowTitle(QtGui.QApplication.translate("self", "dock4", None, QtGui.QApplication.UnicodeUTF8))
        self.dock4WidgetContents = QtGui.QWidget()
        self.dock4Widget.setWidget(self.dock4WidgetContents)
        self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dock4Widget)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    app.exec_()

1 个答案:

答案 0 :(得分:2)

如果没有centralWidget,则dockWidgetArea可以一直展开,并使所有其他停靠区域无法访问。

一种可能的解决方案是使用嵌套停靠(AllowNestedDocks)。这将允许您更自由地堆叠dock小部件。它不是完全相同的行为,但可能更灵活。设置这样的停靠选项:

self.setDockOptions(QtGui.QMainWindow.AnimatedDocks | QtGui.QMainWindow.AllowNestedDocks)

顺便说一下,如果你不想要一个中心小工具,你可以不设置它。默认值为NULL,这与设置虚拟窗口小部件和隐藏具有相同的效果。