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中pycurl库的用法实例
Sep 30 Python
python3爬取淘宝信息代码分析
Feb 10 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python实现密码薄文件读写操作
Dec 16 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
详解如何修改python中字典的键和值
Sep 29 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 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框架排名
2013/07/04 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python中print函数简单使用总结
2019/08/05 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python中time tzset()函数实例用法
2021/02/18 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
网络事业创业计划书范文
2014/01/09 职场文书
测量工程专业求职信
2014/02/24 职场文书
业务员简历自我评价
2014/03/06 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android