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代码来实现服务器和代理服务器
Jun 23 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
用python制作游戏外挂
Jan 04 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python dict 相同key 合并value的实例
Jan 21 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 Python
Python中三种花式打印的示例详解
Mar 19 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+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
修改发贴的编辑功能
2007/03/07 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python实现ping指定IP的示例
2018/06/04 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
消防安全检查制度
2014/02/04 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
社团招新宣传语
2015/07/13 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python