一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

PyQt5:QGraphicsScene入門一:基本介紹、場景定義、添加元素

 學(xué)海無涯GL 2014-10-24

簡介說明:

    這個QGraphicsScene類用于在場景中操作大量的2D圖形元素,這個類是作為一個容器QGraphicsItems存在的,它是連同QGraphicsView用于可視化的二維表面的圖形項(xiàng)目,如直線,矩形,文本,甚至定制物品;還可以有效地確定元素在場景中的位置以及控制元素的時顯示區(qū)域及方式。配合QGraphicsView你可以可視化整個場景、或方大縮小或只顯示一部分等...

    首先來把 QGraphicsView, QGraphicsScene 改個稱呼:
    QGraphicsScene 稱為圖形場景。
    QGraphicsView 稱為圖形窗口。
    你可以理解為 QGraphicsScene圖形窗口 就是可視化的界面,就如同是一臺電視機(jī)的外殼,QGraphicsScene圖形場景 為電視機(jī)的屏幕。而要播放的內(nèi)容是要在屏幕里顯示出來的。
    注意:QGraphicsScene圖形窗口 都有自己的無視覺外觀,它只管理項(xiàng)目。你需要創(chuàng)建一個QGraphicsView圖形視圖 加載 部件可視化的場景。

示例一:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#示例一:
__author__ = 'liaojie'
#!/usr/bin/env python
#coding:utf-8
from PyQt5.QtWidgets import (QGraphicsView,QGraphicsScene,QApplication)
if __name__ == '__main__':
    import sys
    #每個PyQt程序必須創(chuàng)建一個application對象,sys.argv 參數(shù)是命令行中的一組參數(shù)
    #注意:application在 PyQt5.QtWidgets 模塊中
    #注意:application在 PyQt4.QtGui 模塊中
    app = QApplication(sys.argv)
    #創(chuàng)建場景
    scene = QGraphicsScene()
    #在場景中添加文字
    scene.addText("Hello, world!")
    #創(chuàng)建窗口,并將場景加載到窗口中
    view = QGraphicsView(
    #顯示應(yīng)用
    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
24
25
26
27
28
#示例二:
__author__ = 'liaojie'
#!/usr/bin/env python
#coding:utf-8
from PyQt5.QtWidgets import (QGraphicsView,QGraphicsScene,QApplication)
class MainWindow(QGraphicsView):
    def __init__(self,parent=None):
        super(MainWindow, self).__init__(parent)
        #創(chuàng)建場景
        self.scene = QGraphicsScene()
        #在場景中添加文字
        self.scene.addText("Hello, world!")
        #將場景加載到窗口
        self.setScene(self.scene)
if __name__ == '__main__':
    import sys
    #每個PyQt程序必須創(chuàng)建一個application對象,sys.argv 參數(shù)是命令行中的一組參數(shù)
    #注意:application在 PyQt5.QtWidgets 模塊中
    #注意:application在 PyQt4.QtGui 模塊中
    app = QApplication(sys.argv)
    #創(chuàng)建桌面窗口
    mainWindow = MainWindow()
    #顯示桌面窗口
    mainWindow.show()
    sys.exit(app.exec_())



   最后sys.exit(app.exec_())讓應(yīng)用程序的主事件循環(huán)。事件處理從這里開始。主事件循環(huán)從窗口系統(tǒng)接收事件并分發(fā)到應(yīng)用程序的窗口部件上。當(dāng)主事件循環(huán)結(jié)束,如果我們調(diào)用 exit() 方法或者主窗口部件被銷毀。 sys.exit() 方法確保干凈的退出。將通知環(huán)境應(yīng)用程序是如何結(jié)束的。

    你是否想知道為什么 exec_() 方法會有下劃線,一切皆有含義,這顯然是因?yàn)閑xec是Python的關(guān)鍵字,因此,用 exec_() 來取代它。

    要想將元素添加到場景中,首先你必須構(gòu)建一個 QGraphicsScene圖形場景,然后通過調(diào)用addItem()將元素添加到你構(gòu)建的QGraphicsScene圖形場景中。QGraphicsScene圖形場景還有很多相當(dāng)便利的方法,如:addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(),addText()等。所有添加的元素都具有他的尺寸和相對于場景的坐標(biāo)系,元素初始化位置為所在場景中的(0,0)。

    然后,使用QGraphicsView圖形窗口來加載QGraphicsScene圖形場景,就可以看到你在場景中添加的元素啦。當(dāng)場景變化時,(例如,當(dāng)一個元素移動或變換)QGraphicsScene圖形場景發(fā)出的changed()信號。如果要刪除場景中的某個元素用removeItem()。

    QGraphicsScene圖形場景使用一個索引算法來管理元素的位置。默認(rèn)情況下,一個BSP(二進(jìn)制空間劃分)樹被使用;應(yīng)用于場景中的靜態(tài)元素(即不走動)的算法。您可以通過調(diào)用setItemIndexMethod()來禁用該索引。有關(guān)可用的索引算法的詳細(xì)信息,請參閱itemIndexMethod屬性。

    QGraphicsScene圖形場景的邊界矩形是通過調(diào)用setSceneRect()來進(jìn)行設(shè)置的,場景是可以被放在QGraphicsView圖形窗口中的任何位置的。并且場景的默認(rèn)大小是無限制的(即可超出QGraphicsView圖形窗口的大小的,這時窗口就會出現(xiàn)上下左右的滾動條)。這個QGraphicsScene圖形場景中的RECT僅針對場景內(nèi)部不包含外層的QGraphicsView圖形窗口(QGraphicsView圖形窗口有自己的RECT)。在QGraphicsScene圖形場景大小范圍內(nèi)的元素才會被看到即RECT上下左右范圍內(nèi)的。可以通過itemsBoundingRect()來得知現(xiàn)在場景的大小。

    注意:itemsBoundingRect()是一個比較耗時的功能,它的運(yùn)作通過收集場景中所有元素的位置信息找出其中最遠(yuǎn)坐標(biāo)的位置。所以最好先設(shè)置好自己的場景大小不要使用默認(rèn)大小。

    QGraphicsScene圖形場景最大的優(yōu)勢是它能夠有效的確定元素的位置。即便是在有著數(shù)以百萬計(jì)的元素時通過items()函數(shù)可以在幾毫秒內(nèi)確定元素的位置。


items()
將返回所有可見元素在場景中的位置pos。該列表是按遞減的Z-value順序(即,在列表中的第一條是最頂層的元素,最后一條是最底層的元素)。還有一個itemAt()函數(shù)是返回給定位置的最上方元素。
itemAt()
返回指定的位置的元素,如果這個位置上沒有元素返回結(jié)果可能為0條,
注:最上面的元素是一個具有最高的Z-value。
  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    色婷婷在线精品国自产拍| 夜夜嗨激情五月天精品| 久久国产精品亚州精品毛片| 欧美日韩亚洲精品内裤| 黄片免费播放一区二区| 亚洲av熟女国产一区二区三区站| 黑丝袜美女老师的小逼逼| 国产内射一级二级三级| 玩弄人妻少妇一区二区桃花| 日本深夜福利在线播放| 国产又粗又猛又爽色噜噜| 久久综合亚洲精品蜜桃| 成人午夜爽爽爽免费视频| 亚洲中文字幕高清乱码毛片| 91久久国产福利自产拍 | 欧美日韩国产另类一区二区| 亚洲精品福利入口在线| 男人把女人操得嗷嗷叫| 很黄很污在线免费观看| 色婷婷视频在线精品免费观看 | 国产又长又粗又爽免费视频| 一区二区三区免费公开| 夜夜躁狠狠躁日日躁视频黑人| 亚洲国产精品久久精品成人| 国产极品粉嫩尤物一区二区| 极品少妇一区二区三区精品视频| 日本熟女中文字幕一区| 日本中文在线不卡视频| 国产级别精品一区二区视频| 国产一区国产二区在线视频| 国产女同精品一区二区| 日韩三极片在线免费播放| 欧美日韩国产精品自在自线| 久久精品一区二区少妇| 亚洲精品福利视频你懂的| 日本不卡在线视频中文国产| 欧美韩国日本精品在线| 国产又粗又猛又爽又黄的文字| 欧美午夜一级特黄大片| 在线九月婷婷丁香伊人| 日本午夜一本久久久综合|