PyQt - Widget QDock

Une fenêtre ancrable est une sous-fenêtre qui peut rester à l'état flottant ou peut être attachée à la fenêtre principale à une position spécifiée. L'objet de fenêtre principale de la classe QMainWindow a une zone réservée aux fenêtres ancrables. Cette zone est autour du widget central.

Une fenêtre de dock peut être déplacée à l'intérieur de la fenêtre principale, ou elle peut être désancrée pour être déplacée dans une nouvelle zone par l'utilisateur. Ces propriétés sont contrôlées par les éléments suivantsQDockWidget méthodes de classe -

Sr.No. Méthodes et description
1

setWidget()

Définit n'importe quel QWidget dans la zone de la fenêtre du dock

2

setFloating()

Si la valeur est true, la fenêtre du dock peut flotter

3

setAllowedAreas()

Définit les zones auxquelles la fenêtre peut être ancrée

LeftDockWidgetArea
RightDockWidgetArea
TopDockWidgetArea
BottomDockWidgetArea
NoDockWidgetArea
4

setFeatures()

Définit les fonctionnalités de la fenêtre du dock

DockWidgetClosable
DockWidgetMobile
DockWidgetFloatable
DockWidgetVerticalTitleBar
NoDockWidgetCaractéristiques

Exemple

Dans l'exemple suivant, la fenêtre de niveau supérieur est un objet QMainWindow. Un objet QTextEdit est son widget central.

self.setCentralWidget(QTextEdit())

Une fenêtre ancrable est d'abord créée.

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

Un objet QListWidget est ajouté en tant que fenêtre de dock.

self.listWidget = QListWidget()
self.listWidget.addItem("item1")
self.listWidget.addItem("item2")
self.listWidget.addItem("item3")
self.items.setWidget(self.listWidget)

L'objet ancrable est placé vers le côté droit du widget central.

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

Le code complet est le suivant -

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

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("item1")
      self.listWidget.addItem("item2")
      self.listWidget.addItem("item3")
		
      self.items.setWidget(self.listWidget)
      self.items.setFloating(False)
      self.setCentralWidget(QTextEdit())
      self.addDockWidget(Qt.RightDockWidgetArea, self.items)
      self.setLayout(layout)
      self.setWindowTitle("Dock demo")
		
def main():
   app = QApplication(sys.argv)
   ex = dockdemo()
   ex.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

Le code ci-dessus produit la sortie suivante -