PyQt - QDockWidget



A dockable window is a subwindow that can remain in floating state or can be attached to the main window at a specified position. The main window object of QMainWindow class has an area reserved for dockable windows. This area is around the central widget.

A dock window can be moved inside the main window, or they can be undocked to be moved into a new area by the user. Below are the list of methods that are controlled by the following QDockWidget class −

Sr.No. Methods & Description
1

setWidget()

Sets any QWidget in the dock windows area

2

setFloating()

If set to true, the dock window can float

3

setAllowedAreas()

Sets the areas to which the window can be docked

LeftDockWidgetArea
RightDockWidgetArea
TopDockWidgetArea
BottomDockWidgetArea
NoDockWidgetArea
4

setFeatures()

Sets the features of dock window

DockWidgetClosable
DockWidgetMovable
DockWidgetFloatable
DockWidgetVerticalTitleBar
NoDockWidgetFeatures

Appearance of QDockWidget in PyQt

A QDockWidget is made up of a title bar and a content area. The title bar shows the dock widget window title, along with a float button and a close button. Depending on the state of the QDockWidget, the float and close buttons may be either disabled or not displayed.

dockwidget_ex_one

Example

In the following example, top level window is a QMainWindow object. A QTextEdit object is its central widget.

self.setCentralWidget(QTextEdit())

A dockable window is first created.

self.items = QDockWidget("Dockable", self)

A QListWidget object is added as a dock window.

self.listWidget = QListWidget()
self.listWidget.addItem("C++")
self.listWidget.addItem("JAVA")
self.listWidget.addItem("Python")
self.items.setWidget(self.listWidget)

Dockable object is placed towards the right side of the central widget.

self.addDockWidget(Qt.RightDockWidgetArea, self.items)

The complete code is as follows −

import sys
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import QMainWindow, QTextEdit, QDockWidget, 
QListWidget, QApplication, QHBoxLayout
class DockDemo(QMainWindow) :
   def __init__(self, parent=None):
      super(DockDemo, self).__init__(parent)

      layout = QHBoxLayout()
      bar = self.menuBar()
      file = bar.addMenu("File")
      file.addAction("New")
      file.addAction("save")
      file.addAction("quit")

      self.items = QDockWidget("Dockable", self)
      self.listWidget = QListWidget()
      self.listWidget.addItem("C++")
      self.listWidget.addItem("JAVA")
      self.listWidget.addItem("Python")

      self.items.setWidget(self.listWidget)
      self.items.setFloating(False)
      self.setCentralWidget(QTextEdit())
      self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.items)
      self.setLayout(layout)
      self.setWindowTitle("qdockwidget")
def main():
   app = QApplication(sys.argv)
   ex = DockDemo()
   ex.show()
   sys.exit(app.exec())

if __name__ == '__main__':
   main()

Output

The above code produces the following output −

QDockWidget Output
Advertisements