pyqt5之MDI窗口设计
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_()) # 程序关闭时退出进程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构