使用 PySide 的更多码头位置?

More dock locations using PySide?

我喜欢停靠栏类比,并且相信用户可能想要两个大 "central" 小部件以及顶部、底部和侧面小部件。我也喜欢停靠小部件的标签,例如QDockWidget("File System Viewer")。是否有一种简单的当前方法来添加更多停靠位置而不是单个中央小部件? This thread 表明它曾经可用,但现在不推荐使用。如果没有,有没有办法标记中央小部件,使其看起来像停靠栏?

您链接的答案已经提供了解决方案,即设置一个 QMainWindow 作为中央小部件。此中央小部件必须只有停靠小部件,而没有自己的中央小部件。

这种方法有一些限制。首先,中心 dock-widgets 不能与外部 dock-widgets(和 vice-versa)互换。其次,如果 all 外面的 dock-widgets 关闭了,除非 main-window 有一个menu-bar。 menu-bar 自动提供用于恢复 dock-widgets 的上下文菜单。这与 right-clicking a dock-widget title-bar.

时显示的菜单相同

这是一个演示此方法的演示脚本:

import sys
from PySide import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.centre = QtGui.QMainWindow(self)
        self.centre.setWindowFlags(QtCore.Qt.Widget)
        self.centre.setDockOptions(
            QtGui.QMainWindow.AnimatedDocks |
            QtGui.QMainWindow.AllowNestedDocks)
        self.setCentralWidget(self.centre)
        self.dockCentre1 = QtGui.QDockWidget(self.centre)
        self.dockCentre1.setWindowTitle('Centre 1')
        self.centre.addDockWidget(
            QtCore.Qt.LeftDockWidgetArea, self.dockCentre1)
        self.dockCentre2 = QtGui.QDockWidget(self.centre)
        self.dockCentre2.setWindowTitle('Centre 2')
        self.centre.addDockWidget(
            QtCore.Qt.RightDockWidgetArea, self.dockCentre2)
        self.dockLeft = QtGui.QDockWidget(self)
        self.dockLeft.setWindowTitle('Left')
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockLeft)
        self.dockRight = QtGui.QDockWidget(self)
        self.dockRight.setWindowTitle('Right')
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockRight)
        self.menuBar().addMenu('File').addAction('Quit', self.close)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.setGeometry(500, 50, 600, 400)
    window.show()
    sys.exit(app.exec_())