在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
的中央部件作為應用程序的核心功能區。 測試不同停靠組合和浮動狀態以確保界面行為符合預期。