0

The docking is created as required. What I'm not able to do is creating 'Shelf' widget above docking. It shouldn't be part of docking and it should remain at the top. When hidden, docks should cover up the space and when shown again docks should move below.

import sys
from PySide2 import QtGui, QtCore, QtWidgets

class Shelf(QtWidgets.QTabWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.tab1 = QtWidgets.QWidget()
        self.tab2 = QtWidgets.QWidget()
        self.tab3 = QtWidgets.QWidget()

        self.addTab(self.tab1, "Tab 1")
        self.addTab(self.tab2, "Tab 2")
        self.addTab(self.tab3, "Tab 3")

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
  
        self.centre = QtWidgets.QMainWindow(self)
        self.centre.setWindowFlags(QtCore.Qt.Widget)
        self.centre.setDockOptions(
            QtWidgets.QMainWindow.AnimatedDocks |
            QtWidgets.QMainWindow.AllowNestedDocks)
            
        self.setCentralWidget(self.centre)

        self.dockCentre1 = QtWidgets.QDockWidget(self.centre)
        self.dockCentre1.setWindowTitle('Centre 1')
        self.centre.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockCentre1)
                        
        self.dockCentre2 = QtWidgets.QDockWidget(self.centre)
        self.dockCentre2.setWindowTitle('Centre 2')
        self.centre.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockCentre2)
                
        self.dockLeft = QtWidgets.QDockWidget(self)
        self.dockLeft.setWindowTitle('Left')
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockLeft)
        
        self.dockLeft1 = QtWidgets.QDockWidget(self)
        self.dockLeft1.setWindowTitle('Left')
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dockLeft1)
        
        self.dockRight = QtWidgets.QDockWidget(self)
        self.dockRight.setWindowTitle('Right')
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockRight)
        
        self.dockRight1 = QtWidgets.QDockWidget(self)
        self.dockRight1.setWindowTitle('Right')
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockRight1)
        
        self.menuBar().addMenu('File').addAction('Quit', self.close)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.setGeometry(500, 50, 600, 400)
    window.show()
    sys.exit(app.exec_())
Prashant
  • 833
  • 1
  • 11
  • 17
  • Setting a QMainWindow as central widget of another QMainWindow is not suggested, as it's not intended to be used like that. In any case, why are you doing it? – musicamante Mar 12 '21 at 15:12
  • I was not able to create the layout as required. This [link](https://stackoverflow.com/questions/46380037/more-dock-locations-using-pyside) helped me what I was looking for. I am open for correct way to do it. – Prashant Mar 13 '21 at 02:36

0 Answers0