解决方案

QGraphicsScene入门一:基本介绍、场景定义、添加元素

seo靠我 2023-09-23 05:37:06

简介说明:

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

首先来把 QGSEO靠我raphicsView, QGraphicsScene 改个称呼:

    QGraphicsScene 称为图形场景。

    QGraphicsView 称为图形窗口。

你可以理解为 QGraphicsScene图形窗SEO靠我口 就是可视化的界面,就如同是一台电视机的外壳,QGraphicsScene图形场景 为电视机的屏幕。而要播放的内容是要在屏幕里显示出来的。

注意:QGraphicsScene图形窗口 都有自己的无视觉SEO靠我外观,它只管理项目。你需要创建一个QGraphicsView图形视图 加载 部件可视化的场景。

示例一:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2SEO靠我0 #示例一: __author__  =  liaojie #!/usr/bin/env python #coding:utf-8 from  PyQt5.QtWidgets  import  (QSEO靠我GraphicsView,QGraphicsScene,QApplication) if  __name__  = =  __main__ :      import  sys      #每个PyQSEO靠我t程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数      #注意:application在 PyQt5.QtWidgets 模块中      #注意:applSEO靠我ication在 PyQt4.QtGui 模块中      app  =  QApplication(sys.argv)      #创建场景      scene  =  QGraphicsScenSEO靠我e()      #在场景中添加文字      scene.addText( "Hello, world!" )      #创建窗口,并将场景加载到窗口中      view  =  QGraphiSEO靠我csView(      #显示应用      view.show()

示例二:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2SEO靠我4 25 26 27 28 #示例二: __author__  =  liaojie #!/usr/bin/env python #coding:utf-8 from  PyQt5.QtWidgetsSEO靠我  import  (QGraphicsView,QGraphicsScene,QApplication) class  MainWindow(QGraphicsView):      def  __SEO靠我init__( self ,parent = None ):          super (MainWindow,  self ).__init__(parent)          #创建场景  SEO靠我        self .scene  =  QGraphicsScene()          #在场景中添加文字          self .scene.addText( "Hello, woSEO靠我rld!" )          #将场景加载到窗口          self .setScene( self .scene) if  __name__  = =  __main__ :      SEO靠我import  sys      #每个PyQt程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数      #注意:application在 PyQt5.QtWiSEO靠我dgets 模块中      #注意:application在 PyQt4.QtGui 模块中      app  =  QApplication(sys.argv)      #创建桌面窗口    SEO靠我  mainWindow  =  MainWindow()      #显示桌面窗口      mainWindow.show()      sys.exit(app.exec_())

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

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

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

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

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

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

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

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

items()

将返回所有可见元素在场景中的位置pos。该列表是按递减的Z-value顺序(即,在列表中的第一条是最顶层的元素,最后一条是最底层的元SEO靠我素)。还有一个itemAt()函数是返回给定位置的最上方元素。

itemAt()

返回指定的位置的元素,如果这个位置上没有元素返回结果可能为0条,

注:最上面的元素是一个具有最高的Z-value。

http:SEO靠我//www.360doc.com/content/14/1024/11/10724725_419438695.shtml

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2