为什么80%的码农都做不了架构师?>>>   

简介说明:

这个QGraphicsScene类用于在场景中操作大量的2D图形元素,这个类是作为一个容器QGraphicsItems存在的,它是连同QGraphicsView用于可视化的二维表面的图形项目,如直线,矩形,文本,甚至定制物品;还可以有效地确定元素在场景中的位置以及控制元素的时显示区域及方式。配合QGraphicsView你可以可视化整个场景、或方大缩小或只显示一部分等...

首先来把 QGraphicsView, QGraphicsScene 改个称呼:
    QGraphicsScene 称为图形场景。
    QGraphicsView 称为图形窗口。
    你可以理解为 QGraphicsScene图形窗口 就是可视化的界面,就如同是一台电视机的外壳,QGraphicsScene图形场景 为电视机的屏幕。而要播放的内容是要在屏幕里显示出来的。
    注意:QGraphicsScene图形窗口 都有自己的无视觉外观,它只管理项目。你需要创建一个QGraphicsView图形视图 加载 部件可视化的场景。

示例一:

#示例一:
__author__ = 'liaojie'
#!/usr/bin/env python
#coding:utf-8from PyQt5.QtWidgets import (QGraphicsView,QGraphicsScene,QApplication)
if __name__ == '__main__':import sys#每个PyQt程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数#注意:application在 PyQt5.QtWidgets 模块中#注意:application在 PyQt4.QtGui 模块中app = QApplication(sys.argv)#创建场景scene = QGraphicsScene()#在场景中添加文字scene.addText("Hello, world!")#创建窗口,并将场景加载到窗口中view = QGraphicsView(#显示应用view.show()

示例二:

#示例二:
__author__ = 'liaojie'
#!/usr/bin/env python
#coding:utf-8from PyQt5.QtWidgets import (QGraphicsView,QGraphicsScene,QApplication)class MainWindow(QGraphicsView):def __init__(self,parent=None):super(MainWindow, self).__init__(parent)#创建场景self.scene = QGraphicsScene()#在场景中添加文字self.scene.addText("Hello, world!")#将场景加载到窗口self.setScene(self.scene)if __name__ == '__main__':import sys#每个PyQt程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数#注意:application在 PyQt5.QtWidgets 模块中#注意:application在 PyQt4.QtGui 模块中app = QApplication(sys.argv)#创建桌面窗口mainWindow = MainWindow()#显示桌面窗口mainWindow.show()sys.exit(app.exec_())

最后sys.exit(app.exec_())让应用程序的主事件循环。事件处理从这里开始。主事件循环从窗口系统接收事件并分发到应用程序的窗口部件上。当主事件循环结束,如果我们调用 exit() 方法或者主窗口部件被销毁。 sys.exit() 方法确保干净的退出。将通知环境应用程序是如何结束的。

你是否想知道为什么 exec_() 方法会有下划线,一切皆有含义,这显然是因为exec是Python的关键字,因此,用 exec_() 来取代它。

要想将元素添加到场景中,首先你必须构建一个 QGraphicsScene图形场景,然后通过调用addItem()将元素添加到你构建的QGraphicsScene图形场景中。QGraphicsScene图形场景还有很多相当便利的方法,如:addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(),addText()等。所有添加的元素都具有他的尺寸和相对于场景的坐标系,元素初始化位置为所在场景中的(0,0)。

然后,使用QGraphicsView图形窗口来加载QGraphicsScene图形场景,就可以看到你在场景中添加的元素啦。当场景变化时,(例如,当一个元素移动或变换)QGraphicsScene图形场景发出的changed()信号。如果要删除场景中的某个元素用removeItem()。

QGraphicsScene图形场景使用一个索引算法来管理元素的位置。默认情况下,一个BSP(二进制空间划分)树被使用;应用于场景中的静态元素(即不走动)的算法。您可以通过调用setItemIndexMethod()来禁用该索引。有关可用的索引算法的详细信息,请参阅itemIndexMethod属性。

QGraphicsScene图形场景的边界矩形是通过调用setSceneRect()来进行设置的,场景是可以被放在QGraphicsView图形窗口中的任何位置的。并且场景的默认大小是无限制的(即可超出QGraphicsView图形窗口的大小的,这时窗口就会出现上下左右的滚动条)。这个QGraphicsScene图形场景中的RECT仅针对场景内部不包含外层的QGraphicsView图形窗口(QGraphicsView图形窗口有自己的RECT)。在QGraphicsScene图形场景大小范围内的元素才会被看到即RECT上下左右范围内的。可以通过itemsBoundingRect()来得知现在场景的大小。

注意:itemsBoundingRect()是一个比较耗时的功能,它的运作通过收集场景中所有元素的位置信息找出其中最远坐标的位置。所以最好先设置好自己的场景大小不要使用默认大小。

QGraphicsScene图形场景最大的优势是它能够有效的确定元素的位置。即便是在有着数以百万计的元素时通过items()函数可以在几毫秒内确定元素的位置。

items()
将返回所有可见元素在场景中的位置pos。该列表是按递减的Z-value顺序(即,在列表中的第一条是最顶层的元素,最后一条是最底层的元素)。还有一个itemAt()函数是返回给定位置的最上方元素。
itemAt()
返回指定的位置的元素,如果这个位置上没有元素返回结果可能为0条,
注:最上面的元素是一个具有最高的Z-value。

转载于:https://my.oschina.net/golang/blog/209554

PyQt5:QGraphicsScene入门一:基本介绍、场景定义、添加元素相关推荐

  1. redis入门综合概要介绍

    redis入门综合概要介绍 概要介绍:个人感觉redis是一个将数据保存在内存的存取工具,类似一个增强的Map,所以存取比较快.数据的存取基本上是set(key,value),get(key)这种ke ...

  2. 大数据入门概念及应用场景

    参考内容: [知乎]深入浅出大数据:到底什么是Hadoop? [知乎]五万字 | Hive知识体系保姆级教程​ 大数据入门概念及应用场景 一.入门概念 1.1 大数据的4V 1.2 大数据处理的最佳工 ...

  3. 数据库入门理论知识介绍以及编译安装MySql

    数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...

  4. NLP汉语自然语言处理入门基础知识介绍

    NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...

  5. hive使用适用场景_大数据入门:Hive应用场景

    在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理.今天我们的大数据入门分 ...

  6. Html快速入门之基本介绍

    Html快速入门之基本介绍 1. Html快速入门之基本介绍 1.1 网页组成 1.2 浏览器内核 1.3 Web标准 1.4 Html概念 1.5 超文本的含义 1.6 Html骨架标签 1.7 H ...

  7. 【混沌工程】什么是混沌工程? 介绍、定义及更多

    软件和系统开发是创新和解决未知问题的练习.软件和系统是容易出错的,因为它们是由具有不同观点和技能的人(很可能是多人)制作的.技术变得越来越分散和复杂,尤其是随着微服务的推动.很少有人拥有完整的端到端知 ...

  8. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  9. 专访云知声黄伟:场景定义芯片,未来所有场景都需要AI | AI名人堂

    栏目简介:激荡六十年,人工智能已经起航.然而在未来面前,我们都还是孩子.究竟是"奇点临近"?还是泡沫行将破灭?为了解惑,<AI名人堂>将汇聚领航者智慧,和你一起探索前行 ...

最新文章

  1. 学计算机一定要加班吗,老梁推荐:毕业后经常加班的几类专业,工作压力大,对能力要求很高...
  2. WinRT界面控件Essential Studio上如何选择时间范围
  3. 超图数据集管理基本操作 - 隐藏系统字段和添加字段索引
  4. cxxtest单元测试框架源码分析(二):所有对外功能实现分析
  5. Linux时间子系统(二) 软件架构
  6. linux 查看安装的系统版本,linux之查看版本信息命令
  7. [NOIP2006] 能量项链
  8. 简记GAN网络的loss
  9. 一个网站图标引发的血案!绕过同源策略,判断你是否登录了某网站
  10. 12306ByTicket1.1操作手册
  11. 拼多多淘宝虚拟店虚拟商品如何通过网盘发货机器人软件工具进行自动发货,怎么设置口令关键词?百度网盘自动发货机器人
  12. 约瑟夫环数学问题——举一反三、触类旁通
  13. java正则表达式 ascii_Java正则表达式
  14. 电脑断电word文档不见了恢复
  15. STM32H7B0 HAL OSPI配置的一次失败原因分享
  16. python数值互换_python值交换
  17. 戴尔游匣 G15 2022 高配版参数配置
  18. [百分浏览器-centbrowser]不能播放视频处理方法
  19. python离线安装第三方包
  20. MySQL 的 20+ 条最佳实践

热门文章

  1. 项目管理:项目管理过程
  2. Tensorflow模型训练六步法
  3. rk809-code喇叭耳机调试分享
  4. 人人博客_系统架构图_初版
  5. 详细解读 Prometheus 四种指标类型
  6. 建立新工作簿就是建立新的计算机磁盘文件,新大学计算机基础选择题题库19.xls...
  7. 怎么升级linux的内核版本,升级linux内核版本
  8. cmd验证mysql安装成功_怎么使用cmd查看mysql数据库安装成功?
  9. 电子签章(SpringCloud写一个简单签章)
  10. java学习笔记(一)int和Integer的区别