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的Django框架中的templates设置
May 11 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
Python正则捕获操作示例
Aug 19 Python
Python 中的Selenium异常处理实例代码
May 03 Python
TensorFlow实现简单卷积神经网络
May 24 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
python连接mongodb集群方法详解
Feb 13 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
PHP微信红包API接口
2015/12/05 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
python求素数示例分享
2014/02/16 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
网络技术支持面试题
2013/04/22 面试题
校友会欢迎辞
2014/01/13 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
争先创优活动总结
2014/08/27 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
地雷战观后感
2015/06/09 职场文书
经销商会议开幕词
2016/03/04 职场文书