PyQt - Widget QDock

Uma janela encaixável é uma subjanela que pode permanecer no estado flutuante ou pode ser anexada à janela principal em uma posição especificada. O objeto da janela principal da classe QMainWindow tem uma área reservada para janelas encaixáveis. Esta área fica ao redor do widget central.

Uma janela de encaixe pode ser movida para dentro da janela principal ou pode ser desencaixada para ser movida para uma nova área pelo usuário. Essas propriedades são controladas pelo seguinteQDockWidget métodos de classe -

Sr. Não. Métodos e Descrição
1

setWidget()

Define qualquer QWidget na área da janela do dock

2

setFloating()

Se definido como verdadeiro, a janela de encaixe pode flutuar

3

setAllowedAreas()

Define as áreas nas quais a janela pode ser encaixada

LeftDockWidgetArea
RightDockWidgetArea
TopDockWidgetArea
BottomDockWidgetArea
NoDockWidgetArea
4

setFeatures()

Define as características da janela de encaixe

DockWidgetClosable
DockWidgetMovable
DockWidgetFloatable
DockWidgetVerticalTitleBar
NoDockWidgetFeatures

Exemplo

No exemplo a seguir, a janela de nível superior é um objeto QMainWindow. Um objeto QTextEdit é seu widget central.

self.setCentralWidget(QTextEdit())

Uma janela encaixável é criada primeiro.

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

Um objeto QListWidget é adicionado como uma janela de encaixe.

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

O objeto encaixável é colocado no lado direito do widget central.

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

O código completo é o seguinte -

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

O código acima produz a seguinte saída -