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新手实现2048小游戏
Mar 31 Python
python连接字符串的方法小结
Jul 13 Python
简析Python的闭包和装饰器
Feb 26 Python
python实现FTP服务器服务的方法
Apr 11 Python
python 换位密码算法的实例详解
Jul 19 Python
python机器学习之神经网络(二)
Dec 20 Python
python 编码规范整理
May 05 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
Python实现Linux监控的方法
May 16 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Python中读取文件名中的数字的实例详解
Dec 25 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
mysql建立外键
2006/11/25 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php工具型代码之印章抠图
2018/07/18 PHP
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
韩国11街:11STREET
2018/03/27 全球购物
房地产开发计划书
2014/01/10 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
2014年村官工作总结
2014/11/24 职场文书
库房管理员岗位职责
2015/02/12 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
安全生产会议制度
2015/08/06 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python