網上的一個關於QDockWidget 停靠窗體的教程
代碼:
1 # -*- coding: utf-8 -*- 2 from PyQt4.QtGui import * 3 from PyQt4.QtCore import * 4 import sys 5 6 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) 7 8 class MainWidget(QMainWindow): 9 def __init__(self,parent=None): 10 super(MainWidget,self).__init__(parent) 11 self.setWindowTitle(self.tr("依靠窗口")) 12 13 te=QTextEdit(self.tr("主窗口")) 14 te.setAlignment(Qt.AlignCenter) 15 self.setCentralWidget(te) 16 17 #停靠窗口1 18 dock1=QDockWidget(self.tr("停靠窗口1"),self) 19 dock1.setFeatures(QDockWidget.DockWidgetMovable) 20 dock1.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea) 21 te1=QTextEdit(self.tr("窗口1,可在Main Window的左部和右部停靠,不可浮動,不可關閉")) 22 dock1.setWidget(te1) 23 self.addDockWidget(Qt.RightDockWidgetArea,dock1) 24 25 #停靠窗口2 26 dock2=QDockWidget(self.tr("停靠窗口2"),self) 27 dock2.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetClosable) 28 te2=QTextEdit(self.tr("窗口2,只可浮動")) 29 dock2.setWidget(te2) 30 self.addDockWidget(Qt.RightDockWidgetArea,dock2) 31 32 #停靠窗口4 33 dock4=QDockWidget(self.tr("停靠窗口4"),self) 34 dock4.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetClosable) 35 widget4 = QWidget() # 可引入外部Qwidget 36 dock4.setWidget(widget4) 37 self.addDockWidget(Qt.RightDockWidgetArea,dock4) 38 39 self.tabifyDockWidget(dock2, dock4) 40 dock2.raise_() 41 42 #停靠窗口3 43 dock3=QDockWidget(self.tr("停靠窗口3"),self) 44 dock3.setFeatures(QDockWidget.AllDockWidgetFeatures) 45 te3=QTextEdit(self.tr("窗口3,可在Main Window任意位置停靠,可浮動,可關閉")) 46 dock3.setWidget(te3) 47 self.addDockWidget(Qt.BottomDockWidgetArea,dock3) 48 if __name__ == '__main__': 49 app=QApplication(sys.argv) 50 main=MainWidget() 51 main.show() 52 app.exec_()
效果:
解釋:
停靠窗口1只可在主窗口的左邊和右邊停靠,停靠窗口2只可在浮動和在右停靠兩種狀態間切換,並且不可移動,停靠窗口3可實現停靠窗口的各個狀態, 停靠窗口4和窗口2疊加
實例化一個dock title 為標題 self 為parent 因為QDockWidget 不添加到布局管理器中 所以我們需要傳一個parent 給他
dock1=QDockWidget(self.tr("停靠窗口1"),self)
設置dock是否可以關閉拉出等 #參數還有 QDockWidget.DockWidgetClosable 可以關閉 DockWidgetMovable 可以移動
dock1.setFeatures(QDockWidget.DockWidgetMovable)
設置dock只能在左邊 或者右邊顯示 #allowedareas 有Qt.LeftDockWidgetArea Qt.RightDockWidgetArea Qt.TopDockWidgetArea Qt.BottomDockWidgetArea Qt.AllDockWidgetAreas
dock1.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea)
添加一個label控件
dock1.setWidget(te1)
添加dock到主窗口第一個參數為顯示位置
self.addDockWidget(Qt.RightDockWidgetArea,dock1)
兩個停靠窗口疊加
self.tabifyDockWidget(dock2, dock4)
默認dock2為首標簽
dock2.raise_()
更多鏈接: http://www.linuxidc.com/Linux/2012-06/63652p15.htm