网上的一个关于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_()