python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例


Posted in Python onMarch 05, 2020

PyQt5 MDI(多文档窗口)QMidArea简介

一种同时显示多个窗口的方法是,创建多个独立的窗口,这些独立的窗口被称为SDI(Single Document Interface 单文档界面),每个窗口都有自己的菜单系统,工具栏等,这需要占用很多资源

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

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

QMidArea类和QMdiSubWindow类中的常用方法

方法 描述
addSubWindow() 将一个小控件添加在MDI区域作为一个新的子窗口
removeSubWindow() 删除一个子窗口的小控件
setActiveSubWindow() 激活一个子窗口
cascadeSubWindows() 安排子窗口在MDI区域级联显示
tileSubWindows() 安装子窗口在MDI区域平铺显示
closeActiveSubWindow() 关闭活动的子窗口
subWindowList() 返回MDI区域的子窗口列表
setWidget() 设置一个小控件作为QMdiSubWindow实例对象的内部控件

QMdiArea多重文档界面代码实例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MainWindow(QMainWindow):
  count=0
  def __init__(self,parent=None):
    super(MainWindow, self).__init__(parent)
    #实例化Qmidarea区域
    self.mdi=QMdiArea()
    #设置为中间控件
    self.setCentralWidget(self.mdi)
    #实例化菜单栏
    bar=self.menuBar()
    #添加主菜单
    file=bar.addMenu('File')
    #添加子菜单
    file.addAction('New')
    file.addAction('cascade')
    file.addAction('Tiled')
    #点击QAction绑定自定义的槽函数(传递有值【QAction】)
    file.triggered[QAction].connect(self.windowaction)
    #设置主窗口的标题
    self.setWindowTitle("MDI demo")
  def windowaction(self,q):
    print('Triggered')
    if q.text()=='New':
      #子窗口增加一个
      MainWindow.count=MainWindow.count+1
      #实例化多文档界面对象
      sub=QMdiSubWindow()
      #向sub内添加内部控件
      sub.setWidget(QTextEdit())
      #设置新建子窗口的标题
      sub.setWindowTitle('subWindow'+str(MainWindow.count))
      #将子窗口添加到Mdi区域
      self.mdi.addSubWindow(sub)
      #子窗口显示
      sub.show()
    if q.text()=='cascade':
      #cascadeSubWindows():安排子窗口在Mdi区域级联显示
      self.mdi.cascadeSubWindows()
    if q.text()=='Tiled':
      #tileSubWindow():安排子窗口在Mdi区域平铺显示
      self.mdi.tileSubWindow()
if __name__ == '__main__':
  app=QApplication(sys.argv)
  demo=MainWindow()
  demo.show()
  sys.exit(app.exec_())

级联显示

python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例

平铺显示

python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例

代码分析

在这个例子中,主窗口QMainWindow拥有一个菜单控件和 MidArea控件

#实例化菜单栏
    bar=self.menuBar()
    #添加主菜单
    file=bar.addMenu('File')
    #添加子菜单
    file.addAction('New')
    file.addAction('cascade')
    file.addAction('Tiled')

当单击菜单控件时触发triggered信号,连接到槽函数windowaction()

file.triggered[QAction].connect(self.windowaction)

当选择菜单NEw动作时,会添加一个新的Mdi,每个Mdi都有标题,在主窗口内部增加Mdi的数量

#子窗口增加一个
      MainWindow.count=MainWindow.count+1
      #实例化多文档界面对象
      sub=QMdiSubWindow()
      #向sub内添加内部控件
      sub.setWidget(QTextEdit())
      #设置新建子窗口的标题
      sub.setWindowTitle('subWindow'+str(MainWindow.count))
      #将子窗口添加到Mdi区域
      self.mdi.addSubWindow(sub)
      #子窗口显示
      sub.show()

当选择菜单中的Cascade和tiled动作时,会在主窗口显示自窗口的排序方式,级联显示或者平铺显示

if q.text()=='cascade':
      #cascadeSubWindows():安排子窗口在Mdi区域级联显示
      self.mdi.cascadeSubWindows()
    if q.text()=='Tiled':
      #tileSubWindow():安排子窗口在Mdi区域平铺显示
      self.mdi.tileSubWindow()

本文主要讲解了PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例,更多关于PyQt5控件的使用知识请查看下面的相关链接

Python 相关文章推荐
python文件和目录操作方法大全(含实例)
Mar 12 Python
python 垃圾收集机制的实例详解
Aug 20 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
python 画函数曲线示例
Dec 04 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
Python flask框架端口失效解决方案
Jun 04 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
python之json文件转xml文件案例讲解
Aug 07 Python
Python matplotlib修改默认字体的操作
Mar 05 #Python
Django 返回json数据的实现示例
Mar 05 #Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 #Python
python画图常规设置方式
Mar 05 #Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 #Python
python入门之井字棋小游戏
Mar 05 #Python
解决Python图形界面中设置尺寸的问题
Mar 05 #Python
You might like
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
由php的call_user_func传reference引发的思考
2010/07/23 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
javascript Base类 包含基本的方法
2009/07/22 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
ES6的新特性概览
2016/03/10 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
pycharm安装图文教程
2017/05/02 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
教师岗位职责
2013/11/17 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
出纳员岗位责任制
2014/02/11 职场文书
双方协议书
2014/04/22 职场文书
企业法人代表任命书
2014/06/06 职场文书
员工表扬信怎么写
2015/05/05 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python