方法
级联
self.mdi.cascadeSubWindows()
平铺
mdi.tileSubWindows()
关闭全部
mdi.closeAllSubWindows()
关闭活动窗口
mdi.closeActiveSubWindow()
实例
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtCore import QCoreApplication, QMetaObject, Qt, QRect
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMainWindow, QApplication, QMdiArea, QMdiSubWindow, QAction, \
QTextEdit, QToolBar, QDesktopWidget, QDockWidget, QWidget, QMenuBar, QStatusBar, QGroupBox
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.groupBox = QGroupBox(self.centralwidget)
self.groupBox.setObjectName(u"groupBox")
self.groupBox.setGeometry(QRect(40, 30, 471, 271))
self.groupBox.setFocusPolicy(Qt.ClickFocus)
self.groupBox.setContextMenuPolicy(Qt.DefaultContextMenu)
self.groupBox.setLayoutDirection(Qt.LeftToRight)
self.groupBox.setAutoFillBackground(True)
self.groupBox.setAlignment(Qt.AlignHCenter|Qt.AlignTop)
self.dockWidget_3 = QDockWidget(self.centralwidget)
self.dockWidget_3.setObjectName(u"dockWidget_3")
self.dockWidget_3.setGeometry(QRect(715, 69, 85, 464))
self.dockWidget_3.setAutoFillBackground(True)
self.dockWidget_3.setAllowedAreas(Qt.AllDockWidgetAreas)
self.dockWidgetContents_3 = QWidget()
self.dockWidgetContents_3.setObjectName(u"dockWidgetContents_3")
self.dockWidget_3.setWidget(self.dockWidgetContents_3)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 800, 22))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.dockWidget_2 = QDockWidget(MainWindow)
self.dockWidget_2.setObjectName(u"dockWidget_2")
self.dockWidgetContents_2 = QWidget()
self.dockWidgetContents_2.setObjectName(u"dockWidgetContents_2")
self.dockWidget_2.setWidget(self.dockWidgetContents_2)
MainWindow.addDockWidget(Qt.TopDockWidgetArea, self.dockWidget_2)
self.dockWidget_4 = QDockWidget(MainWindow)
self.dockWidget_4.setObjectName(u"dockWidget_4")
self.dockWidgetContents_4 = QWidget()
self.dockWidgetContents_4.setObjectName(u"dockWidgetContents_4")
self.dockWidget_4.setWidget(self.dockWidgetContents_4)
MainWindow.addDockWidget(Qt.BottomDockWidgetArea, self.dockWidget_4)
self.dockWidget = QDockWidget(MainWindow)
self.dockWidget.setObjectName(u"dockWidget")
self.dockWidgetContents = QWidget()
self.dockWidgetContents.setObjectName(u"dockWidgetContents")
self.dockWidget.setWidget(self.dockWidgetContents)
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget)
self.dockWidget_5 = QDockWidget(MainWindow)
self.dockWidget_5.setObjectName(u"dockWidget_5")
self.dockWidgetContents_5 = QWidget()
self.dockWidgetContents_5.setObjectName(u"dockWidgetContents_5")
self.dockWidget_5.setWidget(self.dockWidgetContents_5)
self.setCentralWidget(self.groupBox)
MainWindow.addDockWidget(Qt.RightDockWidgetArea, self.dockWidget_5)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"1", None))
# retranslateUi
class frm(Ui_MainWindow,QMainWindow):
def __init__(self):
super(frm,self).__init__()
self.setupUi(self)
class SubWin(QMainWindow):
count = 0
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
self.toolBar = QToolBar()
self.addToolBar(self.toolBar)
self.toolBar.addAction("新建")
self.toolBar.addAction("级联")
self.toolBar.addAction("平铺")
self.toolBar.addAction("关闭全部")
self.toolBar.addAction("关闭活动窗口")
self.toolBar.addAction("测试")
# 添加图形化按钮
# new=QAction(QIcon('u1.png'), 'new', self)
# self.toolBar.addAction(new)
self.toolBar.actionTriggered[QAction].connect(self.windowaction)
bar = self.menuBar()
file = bar.addMenu("File")
# 添加子菜单
file.addAction("新建")
file.addAction("级联")
file.addAction("平铺")
file.triggered[QAction].connect(self.windowaction)
self.setWindowTitle("MDI Demo")
# self.showFullScreen() #全屏显示
self.showMaximized() # 窗口最大化
# self.showNormal() #正常显示
# self.setGeometry(QDesktopWidget().screenGeometry())
def windowaction(self, q):
type = q.text()
print("Triggered : %s" % type)
if type == "新建":
# 子窗口增加一个
self.count = self.count + 1
# 实例化多文档界面对象
sub = QMdiSubWindow()
# sub.show()
# 向sub内部添加控件
f=frm()
sub.setWidget(f)
# sub.setWidget(QTextEdit())
sub.resize(800,600)
sub.setWindowTitle("subWindow %d" % self.count)
self.mdi.addSubWindow(sub)
sub.show()
elif type == "级联":
self.mdi.cascadeSubWindows()
elif type == "平铺":
self.mdi.tileSubWindows()
elif type == "关闭全部":
self.mdi.closeAllSubWindows()
elif type == "关闭活动窗口":
self.mdi.closeActiveSubWindow()
elif type == "测试":
lst = self.mdi.subWindowList()
print(lst)
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == "__main__":
app = QApplication(sys.argv)
win = SubWin()
win.show()
sys.exit(app.exec_())
原创2022/9/19大约 2 分钟