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实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
python绘制简单彩虹图
Nov 19 Python
浅谈Python基础—判断和循环
Mar 22 Python
linux中如何使用python3获取ip地址
Jul 15 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
keras用auc做metrics以及早停实例
Jul 02 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
Python自动化之批量处理工作簿和工作表
Jun 03 Python
python lambda 表达式形式分析
Apr 03 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
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
介绍一下write命令
2012/09/24 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
培训讲师岗位职责
2014/04/13 职场文书
化工专业求职信
2014/07/01 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
见习报告的格式
2014/11/04 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
MySQL派生表联表查询实战过程
2022/03/20 MySQL