在PyQt5中使用QDockWidget可以创建灵活的停靠窗口,增强应用程序的多功能性。以下是详细的步骤和示例代码:
基本步骤
导入模块 :确保导入必要的PyQt5模块。创建主窗口 :继承QMainWindow并初始化界面。设置中心部件 :例如QTextEdit作为主内容区域。创建QDockWidget : 设置标题、允许停靠的区域和特性(可关闭、可移动等)。 添加内容部件(如QListWidget)。 添加停靠窗口 :使用addDockWidget()
将QDockWidget添加到主窗口。处理多个停靠窗口 :使用splitDockWidget()
或tabifyDockWidget()
进行布局管理。
示例代码
import sys
from PyQt5. QtWidgets import ( QApplication, QMainWindow, QTextEdit, QDockWidget, QListWidget)
from PyQt5. QtCore import Qtclass MainWindow ( QMainWindow) : def __init__ ( self) : super ( ) . __init__( ) self. initUI( ) def initUI ( self) : self. textEdit = QTextEdit( ) self. setCentralWidget( self. textEdit) dockLeft = QDockWidget( "工具面板" , self) dockLeft. setAllowedAreas( Qt. LeftDockWidgetArea | Qt. RightDockWidgetArea) dockLeft. setFeatures( QDockWidget. DockWidgetClosable | QDockWidget. DockWidgetMovable) listWidget = QListWidget( ) listWidget. addItems( [ "工具1" , "工具2" , "工具3" ] ) dockLeft. setWidget( listWidget) self. addDockWidget( Qt. LeftDockWidgetArea, dockLeft) dockRight = QDockWidget( "属性面板" , self) dockRight. setAllowedAreas( Qt. RightDockWidgetArea) dockRight. setFeatures( QDockWidget. DockWidgetFloatable | QDockWidget. DockWidgetClosable) propList = QListWidget( ) propList. addItems( [ "大小" , "颜色" , "位置" ] ) dockRight. setWidget( propList) self. addDockWidget( Qt. RightDockWidgetArea, dockRight) self. setWindowTitle( '停靠窗口示例' ) self. setGeometry( 100 , 100 , 1000 , 600 ) if __name__ == '__main__' : app = QApplication( sys. argv) mainWin = MainWindow( ) mainWin. show( ) sys. exit( app. exec_( ) )
关键方法说明
setAllowedAreas() :指定允许停靠的区域(使用Qt.DockWidgetArea
枚举值,如Qt.LeftDockWidgetArea
)。setFeatures() :设置停靠窗口特性,如QDockWidget.DockWidgetClosable
(可关闭)、QDockWidget.DockWidgetMovable
(可移动)。addDockWidget() :将停靠窗口添加到主窗口的指定区域。splitDockWidget(existing, new, orientation) :分割现有停靠区域来放置新窗口。tabifyDockWidget(first, second) :将两个停靠窗口堆叠为标签页形式。
高级用法
恢复关闭的停靠窗口 :保留对QDockWidget的引用,通过setVisible(True)
或重新添加。信号处理 :连接dockLocationChanged
等信号以响应状态变化。浮动窗口调整 :覆盖floatEvent()
方法处理浮动时的界面调整。
注意事项
确保正确导入枚举值,如Qt.LeftDockWidgetArea
和QDockWidget.DockWidgetClosable
。 使用QMainWindow
的中央部件作为应用程序的核心功能区。 测试不同停靠组合和浮动状态以确保界面行为符合预期。