目录
addDockWidget(self,area,dockWidget,orientation=None)
简介
QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或者作为子窗口停靠在主窗口的某个区域。
QMainWindow类的主窗口存在停靠QDockWidget部件的区域,如下图所示。
QDockWidget的方法
setWidget()
在Dock窗口区域设置QWidget
setFloating()
设置Dock窗口是否可以浮动,True表示可以浮动,Flase表示不可以。
setAllowedAreas()
设置窗口可以停靠的区域
Qt.LeftDockWidgetArea
Qt.RightDockWidgetArea
Qt.TopDockWidgetArea
Qt.BottomDockWidgetArea
Qt.NoDockWidgetArea 没有可以停靠的地方
setFeatures()
设置停靠窗口的功能属性。
QDockWidget.AllDockWidgetFeatures
QDockWidget.DockWidgetClosable
QDockWidget.DockWidgetFloatable
QDockWidget.DockWidgetMovable
QDockWidget.DockWidgetVerticalTitleBar
QDockWidget.NoDockWidgetFeatures
QMainWindow的方法
addDockWidget(self,area,dockWidget,orientation=None)
添加停靠窗口到主窗口的方法的源代码如下。
需要传递两个参数,一个是区域(这个是一开始添加时停靠的区域,参数应该和上面的区域一样),另一个是停靠控件。
程序
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QDockWidget, QListWidget, \
QTextEdit, QVBoxLayout
from PyQt5.QtCore import Qt
class DockDemo(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
# 设置列表控件
self.listWidget = QListWidget()
self.listWidget.addItem("item1")
self.listWidget.addItem("item2")
self.listWidget.addItem("item3")
self.listWidget2 = QListWidget()
self.listWidget2.addItem("item10")
self.listWidget2.addItem("item20")
self.listWidget2.addItem("item30")
# 停靠部件1
self.dockWidget = QDockWidget('Dockable1', self)
self.dockWidget.setWidget(self.listWidget) # 在Dock窗口区域设置列表控件
self.dockWidget.setFloating(False) # 设置窗口是否可以浮动,True表示可以,False不可以
self.dockWidget.setAllowedAreas(Qt.AllDockWidgetAreas)
self.dockWidget.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable)
# 停靠部件2
self.dockWidget2 = QDockWidget('Dockable2', self)
self.dockWidget2.setWidget(self.listWidget2) # 在Dock窗口区域设置列表控件
self.dockWidget2.setFloating(False) # 设置窗口是否可以浮动,True表示可以,False不可以
self.dockWidget2.setAllowedAreas(Qt.AllDockWidgetAreas)
self.dockWidget2.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable)
# 设置窗口标题
self.setWindowTitle('Dock例子')
# 添加停靠部件
self.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget2)
self.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget)
self.setLayout(QVBoxLayout())
# 设置中心部件
self.setCentralWidget(QTextEdit())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DockDemo()
window.show()
sys.exit(app.exec_())
运行截图