QDockWidget样例
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.lay = QHBoxLayout()
self.text = QPlainTextEdit()
self.lay.addWidget(self.text)
self.setLayout(self.lay)
class DockDemo(QMainWindow):
def __init__(self):
super().__init__()
self.width = self.size().width() # 获取窗口宽度
self.height = self.size().height() # 获取窗口高度
self.initUI()
def initUI(self):
dock1 = QDockWidget('one') # 实例化6个dockwidget
dock2 = QDockWidget('two')
dock3 = QDockWidget('three')
dock4 = QDockWidget('four')
dock5 = QDockWidget('five')
dock6 = QDockWidget('six')
self.mywidget1 = MyWidget() # 实例化6个窗体控件
self.mywidget2 = MyWidget()
self.mywidget3 = MyWidget()
self.mywidget4 = MyWidget()
self.mywidget5 = MyWidget()
self.mywidget6 = MyWidget()
dock1.setWidget(self.mywidget1) # 设置dockwidget中的contents
dock2.setWidget(self.mywidget2)
dock3.setWidget(self.mywidget3)
dock4.setWidget(self.mywidget4)
dock5.setWidget(self.mywidget5)
dock6.setWidget(self.mywidget6)
self.addDockWidget(Qt.LeftDockWidgetArea, dock1) # 添加一个dock
self.splitDockWidget(dock1, dock2, Qt.Horizontal) # 将dock1横向拆分成dock1和dock2
self.splitDockWidget(dock2, dock3, Qt.Horizontal)
self.splitDockWidget(dock1, dock4, Qt.Vertical)
self.splitDockWidget(dock2, dock5, Qt.Vertical)
self.splitDockWidget(dock3, dock6, Qt.Vertical)
docklist = [dock1, dock2, dock3]
dock1size = 0.6*self.width # 设置dock1占窗口宽度的60%
dock2size = 0.3*self.width
dock3size = 0.1*self.width
docksize = [int(dock1size), int(dock2size), int(dock3size)]
self.resizeDocks(docklist, docksize, Qt.Horizontal) # 调整每个dock所占的百分比
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = DockDemo()
demo.showMaximized()
sys.exit(app.exec_())
运行效果如下图: