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 11 Python
Python中的ConfigParser模块使用详解
May 04 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python将秒数转化为时间格式的实例
Sep 16 Python
python3实现多线程聊天室
Dec 12 Python
Numpy之random函数使用学习
Jan 29 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
Python遍历字典方式就实例详解
Dec 28 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python批量将csv文件转化成xml文件的实例
May 10 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实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
JS原型对象通俗"唱法"
2012/12/27 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
先进党支部申报材料
2014/12/24 职场文书
初三毕业评语
2014/12/26 职场文书
婚前保证书范文
2015/02/28 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python