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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python中函数传参详解
Jul 03 Python
Python自动生产表情包
Mar 17 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
python的re模块使用方法详解
Jul 26 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
Python 多线程共享变量的实现示例
Apr 17 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
Python深度学习之实现卷积神经网络
Jun 05 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
咖啡的种类和口感
2021/03/03 新手入门
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
jQuery入门知识简介
2010/03/04 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
js实现简单的倒计时
2021/01/28 Javascript
Python2中的raw_input() 与 input()
2015/06/12 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python和c语言的主要区别总结
2019/07/07 Python
Django实现发送邮件功能
2019/07/18 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
植物选择:Botanic Choice
2017/02/15 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
幼儿教师国培感言
2014/02/19 职场文书
项目建议书格式
2014/03/12 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
开除通知书范本
2015/04/25 职场文书
什么是SOLID
2022/03/24 Javascript