PyQt: widget de QDock

Una ventana acoplable es una subventana que puede permanecer en estado flotante o puede adjuntarse a la ventana principal en una posición específica. El objeto de ventana principal de la clase QMainWindow tiene un área reservada para ventanas acoplables. Esta área está alrededor del widget central.

Una ventana de acoplamiento se puede mover dentro de la ventana principal, o se pueden desacoplar para que el usuario la mueva a una nueva área. Estas propiedades están controladas por lo siguienteQDockWidget métodos de clase -

No Señor. Métodos y descripción
1

setWidget()

Configura cualquier QWidget en el área de la ventana del muelle

2

setFloating()

Si se establece en verdadero, la ventana del muelle puede flotar

3

setAllowedAreas()

Establece las áreas en las que se puede acoplar la ventana

LeftDockWidgetArea
RightDockWidgetArea
TopDockWidgetArea
BottomDockWidgetArea
NoDockWidgetArea
4

setFeatures()

Establece las características de la ventana del muelle.

DockWidgetCierre
DockWidgetMovable
DockWidgetFloatable
DockWidgetVerticalTitleBar
NoDockWidgetFeatures

Ejemplo

En el siguiente ejemplo, la ventana de nivel superior es un objeto QMainWindow. Un objeto QTextEdit es su widget central.

self.setCentralWidget(QTextEdit())

Primero se crea una ventana empotrable.

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

Se agrega un objeto QListWidget como una ventana de acoplamiento.

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

El objeto acoplable se coloca hacia el lado derecho del widget central.

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

El código completo es el siguiente:

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()

El código anterior produce la siguiente salida: