2017-09-23 226 views
1

我喜欢码头的比喻,并相信用户可能需要两个大的“中心”小部件以及顶部,底部和侧面小部件。我也喜欢码头小部件被标记,例如QDockWidget(“文件系统查看器”)。有没有一种简单而现代的方式来添加更多的码头位置,而不是单个中央部件? This thread表示它曾经可用,但现在不推荐。如果没有,是否有办法标记中心小部件,使其看起来像码头?使用PySide的更多码头位置?

回答

1

您链接到的答案已经提供了一个解决方案,即将QMainWindow设置为中央控件。这个中心部件必须只有码头部件,并且没有自己的中央部件。

这种方法有一些限制。首先,中央码头小部件不能与外部码头小部件互换(反之亦然)。其次,如果全部外部的dock-widgets已关闭,除非主窗口有菜单栏,否则无法恢复它们。菜单栏会自动提供用于恢复Dock-Widget的上下文菜单。这是右击dock-widget标题栏时显示的菜单。

这里是一个演示脚本演示了这种方法:

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_()) 
+0

如果这仍然是最好的方法,我将使用它。你的代码完美地工作。谢谢。 – davideps