PyQt5 - QDock 小部件

可停靠窗口是一个子窗口,它可以保持浮动状态,也可以附加到主窗口的指定位置。 QMainWindow 类的主窗口对象有一个为可停靠窗口保留的区域。 该区域位于中央小部件周围。

停靠窗口可以在主窗口内移动,也可以取消停靠以由用户移动到新区域。 这些属性由以下 QDockWidget 类方法控制 −

序号 方法 & 说明
1

setWidget()

设置停靠窗口区域中的任何 QWidget

2

setFloating()

如果设置为 true,停靠窗口可以浮动

3

setAllowedAreas()

设置窗口可以停靠的区域

LeftDockWidgetArea
RightDockWidgetArea
TopDockWidgetArea
BottomDockWidgetArea
NoDockWidgetArea
4

setFeatures()

设置停靠窗口的功能

DockWidgetClosable
DockWidgetMovable
DockWidgetFloatable
DockWidgetVerticalTitleBar
NoDockWidgetFeatures

示例

在下面的例子中,顶层窗口是一个 QMainWindow 对象。 QTextEdit 对象是它的中心部件。

self.setCentralWidget(QTextEdit())

首先创建一个可停靠窗口。

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

QListWidget 对象被添加为停靠窗口。

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

可停靠对象放置在中央小部件的右侧。

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

完整代码如下 −

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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()

上面的代码产生以下输出。 单击 Dock 图标以取消停靠 ListWidget 窗口。 双击再次停靠 −

QDockWidget 输出

❮ PyQt5 基本小部件