MDI子窗口的添加与排列
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test_MDIArea.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QAction, QMdiSubWindow, QLabel
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
self.mdiArea.setGeometry(QtCore.QRect(210, 100, 361, 351))
self.mdiArea.setObjectName("mdiArea")
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
# 设置主菜单
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName('menu')
self.menu.setTitle('子窗体操作')
MainWindow.setMenuBar(self.menubar)
# 设置新建菜单项
self.actionxinjian = QtWidgets.QAction(MainWindow)
self.actionxinjian.setObjectName('actionxinjian')
self.actionxinjian.setText("新建")
# 设置平铺菜单项
self.actionpingpu = QtWidgets.QAction(MainWindow)
self.actionpingpu.setObjectName('actionpingpu')
self.actionpingpu.setText("平铺显示")
# 设置级联菜单项
self.actionjilian = QtWidgets.QAction(MainWindow)
self.actionjilian.setObjectName("actionjilian")
self.actionjilian.setText("级联显示")
# 将新建的三个菜单项加到主菜单
self.menu.addAction(self.actionxinjian)
self.menu.addAction(self.actionpingpu)
self.menu.addAction(self.actionjilian)
# 将设置完成的主菜单加到菜单栏
self.menubar.addAction(self.menu.menuAction())
# 为菜单项关联信号
self.menubar.triggered[QAction].connect(self.action)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
count = 0 # 新建子窗口的个数
def action(self,m):
if m.text() == "新建":
sub = QMdiSubWindow()
self.count = self.count + 1
# 设置子窗口标题
sub.setWindowTitle("子窗口" + str(self.count))
# 在子窗口中添加一个标签并设置文本
sub.setWidget(QLabel("这是第 %d 个子窗口"%self.count))
self.mdiArea.addSubWindow(sub) # 将新建的子窗口添加到MDI区域
sub.show() # 显示子窗口
elif m.text() =="平铺显示":
self.mdiArea.tileSubWindows() # 对子窗口进行平铺排列
elif m.text() =="级联显示":
self.mdiArea.cascadeSubWindows() #对子窗口级联排列
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MDI窗口"))
import sys
# 主方法,程序从此处启动PyQt设计的窗体
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion") # 设置窗口风格
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec_()) # 程序关闭时退出进程