一个典型的GUI应用程序可能有多个窗口,选项卡控件和堆栈窗口控件允许一次使用其中的一个窗口。然而,很多时候这种方法不是很有用,因为其他窗口的视图是隐藏的一种同时显示多个窗口的方法是,创建多个独立的窗口,这些独立的窗口被称为SDI(Single Document Interface,单文档界面),每个窗口都可以有自己的菜单系统、工具栏等。这需要占用较多的内存资源。

MDI (Multiple Document Interface,多文档界面)应用程序占用较少的内存资源,子窗口都可以放在主窗口容器中,这个容器控件被称为QMdiArea。

QMidArea控件通常占据在QMainWindow对象的中央位置,子窗口在这个区域是QMdiSubWindow类的实例,可以设置任何QWidget作为子窗口对象的内部控件,子窗口在MDI区域进行级联排列布局。

QMdiArea类和QMdiSubWindow类中的常用方法如下表所示:

通过示例,了解QMdiArea类和QMdiSubWindow类多文档界面的使用方法,效果如下所示:

示例中,主窗口QMainWindow拥有一个菜单控件和MidArea控件。当单击菜单控件时触发triggered信号,连接到槽函数windowaction()。当选择菜单中的“New"动作时,会添加一个新的MDI,每个MDI都有标题,在主窗口内部会增加MDI的数量。当选择菜单中的“cascade"和"Tiled"动作时,会在主窗口中显示子窗口的排列方式:级联显示子窗口或平铺显示子窗口。

实现代码如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class MainWindow(QMainWindow):count=0def __init__(self, parent=None):super(MainWindow, self).__init__(parent)self.mdi = QMdiArea()self.setCentralWidget(self.mdi)bar=self.menuBar()file=bar.addMenu("File")file.addAction("New")file.addAction("cascade")file.addAction("Tiled")file.triggered[QAction].connect(self.windowaction)self.setWindowTitle("MDI demo")def windowaction(self, q): print( "triggered")if q.text()=="New":MainWindow.count=MainWindow.count+1sub=QMdiSubWindow()sub.setWidget(QTextEdit())sub.setWindowTitle("subwindow"+str(MainWindow.count))self.mdi.addSubWindow(sub)sub.show()if q.text()=="cascade":self.mdi.cascadeSubWindows()if q.text()=="Tiled":self.mdi.tileSubWindows()if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWindow()demo.show()sys.exit(app.exec_())

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)相关推荐

  1. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  2. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  3. Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

    目录 1.QTimer计时器类 2.QThread多线程类 3.事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求.例如,如果需要执行一个特别耗时的操作 ...

  4. Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

    目录 1.QCalendar日历类 2.QDateTimeEdit时间类 1.QCalendar日历类 QCalendar是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默 ...

  5. Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

    QSpinBox是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也可以输入值. 在默认情况下,QSpinBox的取值范围是0-9 ...

  6. Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)

    QComboBox是一个集按钮和下拉选项于一体的控件,也被称为下拉列表框. QComboBox类中的常用方法如下表所示: QComboBox类中的常用信号如下表所示: 来看看QComboBox按钮类的 ...

  7. Python Qt GUI设计:QLabel标签类(基础篇—11)

    QLabel对象作为一个占位符可以显示不可编辑的文本或图片,也可以放置一个GIF动画,还可以被用作提示标记为其他控件,纯文本.链接或富文本可以显示在标签上. QLabel类中的常用方法如下表所示: Q ...

  8. Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

    有时候在项目开发时,经常会遇到一些耗时操作导致界面迟缓卡顿,为了解决这个问题,可以创建多线程,使用主线程更新界面使用子线程实时处理数据,最后将结果显示到界面上. PyQt多线程将使用QThread函数 ...

  9. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

最新文章

  1. pandas将dataframe中的特定数据列的内容转化为列表list数据(convert dataframe column values into a list)
  2. java数组二分查找的简单例题_Java基础-练习 数组元素二分查找(折半查找)
  3. SUSE Linux系统安全配置十条
  4. php 输出mysql_php如何输出mysql查询结果
  5. vue和react的区别是什么?
  6. 圆柱属于能滚动的物体吗_滚动轴承中摩擦的主要来源,轧机轴承技术(一)
  7. 网页视频之ACC格式解析
  8. Java全栈工程师必备技能_一个优秀的“全栈工程师”要具备哪些素质呢?
  9. 笔记本计算机没反应怎么办,笔记本电脑开机黑屏没反应怎么办?
  10. 腾讯云区块链,产业区块链的坚守者
  11. 美通企业日报 | 广州塔开业至今迎游客近1557万人次;居然之家成功借壳上市
  12. FastReport for Delphi
  13. 三顶红帽子和两顶白(蓝)帽子。
  14. 错误 '800a03ea'
  15. excel 切片器 html,Excel切片器--数据智能展示的利器
  16. 从外包到拿下阿里 offer,这 2 年 5 个月 13 天到底发生了什么?
  17. 2022-2028年中国艾灸市场研究及前瞻分析报告
  18. 【李宏毅深度学习CP10】Self-attention(part1)
  19. 百度SEO站群在线做横幅banner广告源码
  20. HTTP协议思维导图

热门文章

  1. Unable to preview the file. Please open a JS, CSS or HML file of the JS UI framework or a layout.xml
  2. python 获取打印的内容并保存到记事本里面
  3. Android自定义View —— TypedArray
  4. Are you missing a call to unregisterReceiver()?
  5. python+selenium浏览器常用操作(一)
  6. 云栖社区 正文 永久免费SSL安全证书Letsencrypt安装使用方法
  7. JS导出PDF插件(支持中文、图片使用路径)
  8. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参
  9. andoridView修改
  10. 数论(一)——素数,GCD,LCM