最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python編程使用PyQt創(chuàng)建UE藍(lán)圖

 更新時(shí)間:2021年10月28日 16:12:50   作者:在逆境中蛻變  
這篇文章主要為大家介紹了python編程中如何使用PyQt創(chuàng)建UE藍(lán)圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

實(shí)現(xiàn)思路

1、場(chǎng)地部署:我們需要擁有一個(gè)可以用來(lái)畫節(jié)點(diǎn)的地方!詳看我這篇文章QGraphicsScene、QGraphicsView的基礎(chǔ)使用,這篇文章用的也是同樣的方法PyQt制作預(yù)覽窗口(游戲中的小地圖)
2、節(jié)點(diǎn)創(chuàng)建:我們需要自定義節(jié)點(diǎn),也就是下圖中的方框內(nèi)的東西,主要涉及到的就是Qt中的QGraphicsItem,通過(guò)繼承這個(gè)類來(lái)自定義節(jié)點(diǎn)樣式
3、連線:涉及到的就是Qt中的QGraphicsLineItem,繼承這個(gè)類,并在paint中自定義連線樣式,比如我這里使用的是qt自帶的貝塞爾曲線
實(shí)現(xiàn)的效果如下,節(jié)點(diǎn)之間可以通過(guò)端口互相連接

在這里插入圖片描述

1、場(chǎng)地部署

class EditorView(QGraphicsView):
    def __init__(self, parent=None):
        super(EditorView, self).__init__(parent)
        self.parent = parent
        self.scaleFactor = 1
        self.lastPos = QPointF()
        self.scene = EditorScene(self)
        self.setScene(self.scene)
        self.setSceneRect(-1 << 30, -1 << 30, 1 << 31, 1 << 31)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.verticalScrollBar().setEnabled(False)
        self.horizontalScrollBar().setEnabled(False)

class EditorScene(QGraphicsScene):
    def __init__(self, parent=None):
        super(EditorScene, self).__init__(parent)

	def drawBackground(self, painter, rect):
		pass
		# 在這里畫底圖,也就是上面的方格圖

2、節(jié)點(diǎn)創(chuàng)建

下面是創(chuàng)建節(jié)點(diǎn)的主體,就那個(gè)黑框框的東西

class NodeItem(QGraphicsItem):
    def __init__(self, parent=None):
        super(NodeItem, self).__init__(parent)
        self.setFlag(QGraphicsItem.ItemIsMovable, True)
        self.setFlag(QGraphicsItem.ItemIsSelectable, True)
        self.setFlag(QGraphicsItem.ItemSendsGeometryChanges, True)
        self.setFlag(QGraphicsItem.ItemIsFocusable, True)
        self.nodeName = "Node"
        self.width = 150
        self.height = 50
		self.addPort()
    def addPort(self):
        leftPort = PortItem(self)
        leftPort.setPos(5, self.height/2.7)
        rightPort = PortItem(self)
        rightPort.setPos(self.width-20, self.height/2.7)
    def paint(self, painter, style, *args, **kwargs):
        brush = QBrush(QColor(0xaa, 0xaa, 0xaa, 0xaa))
        painter.setBrush(brush)
        pen = QPen()
        pen.setWidth(1)
        painter.setPen(pen)
        painter.drawRect(0, 0, self.width, self.height)
        painter.drawText(self.width/2.5, self.height/1.8, self.nodeName)

下面是節(jié)點(diǎn)端口的創(chuàng)建

class PortItem(QGraphicsItem):
    def __init__(self, parent=None):
        super(PortItem, self).__init__(parent)
        self.portDiam = 15
    def paint(self, painter, style, *args, **kwargs):
        portColor = QColor(0x00, 0xaa, 0x00, 0x66)
        painter.setBrush(portColor)
        pen = QPen()
        pen.setColor(portColor)
        pen.setWidth(2)
        painter.setPen(pen)
        painter.drawEllipse(0, 0, self.portDiam, self.portDiam)

在節(jié)點(diǎn)NodeItem里面,創(chuàng)建兩個(gè)端口用于連接

3、連線

①首先是連線類的創(chuàng)建

class LineItem(QGraphicsItem):
    def __init__(self, posStart, posEnd, parent=None):
        super(LineItem, self).__init__(parent)
        self.setFlag(QGraphicsItem.ItemIsSelectable, True)
        self.setFlag(QGraphicsItem.ItemSendsGeometryChanges, True)
        self.setFlag(QGraphicsItem.ItemIsFocusable, True)
        self.posStart = posStart
        self.posEnd = posEnd
    def paint(self, painter, style, *args, **kwargs):
        midPos = (self.posStart + self.posEnd)/2
        lineColor = QColor(0xff, 0x00, 0x00, 0xff)
        pen = QPen()
        pen.setColor(lineColor)
        pen.setWidth(2)
        painter.setPen(pen)
        linePath = QPainterPath()
        linePath.moveTo(self.posStart)
        linePath.cubicTo(QPointF(midPos.x(), self.posStart.y()), midPos, self.posEnd)
        painter.drawPath(linePath)

②如何連接節(jié)點(diǎn)

def mouseReleaseEvent(self, event):
	self.line = LineItem(self.portPosStart, self.portPosEnd)
    self.scene.addItem(self.line)

ps寫在最后,如果你的圖沒(méi)有刷新,你可以先把窗口縮小再打開(kāi),他就會(huì)刷新了,如果你想讓他自動(dòng)刷新,就調(diào)用scene.update()方法吧!

以上就是python編程使用PyQt創(chuàng)建UE藍(lán)圖的詳細(xì)內(nèi)容,更多關(guān)于PyQt創(chuàng)建UE藍(lán)圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用Python調(diào)用win命令行提高工作效率的實(shí)例

    用Python調(diào)用win命令行提高工作效率的實(shí)例

    今天小編就為大家分享一篇用Python調(diào)用win命令行提高工作效率的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 快速解決docker-py api版本不兼容的問(wèn)題

    快速解決docker-py api版本不兼容的問(wèn)題

    今天小編就為大家分享一篇快速解決docker-py api版本不兼容的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python中計(jì)算相似度的方法詳解

    Python中計(jì)算相似度的方法詳解

    計(jì)算相似度是許多機(jī)器學(xué)習(xí)和數(shù)據(jù)分析任務(wù)中的重要步驟,尤其是在推薦系統(tǒng)、文本分析和圖像處理等領(lǐng)域,下面我們就來(lái)看看具體的實(shí)現(xiàn)方法吧
    2025-02-02
  • 本地文件上傳到七牛云服務(wù)器示例(七牛云存儲(chǔ))

    本地文件上傳到七牛云服務(wù)器示例(七牛云存儲(chǔ))

    這篇文章主要介紹了使用PYTHON把本地文件上傳到七牛云服務(wù)的方法,開(kāi)發(fā)環(huán)境是Python 2.7,大家參考使用吧
    2014-01-01
  • python獲取url的返回信息方法

    python獲取url的返回信息方法

    今天小編就為大家分享一篇python獲取url的返回信息方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 利用Django模版生成樹狀結(jié)構(gòu)實(shí)例代碼

    利用Django模版生成樹狀結(jié)構(gòu)實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于利用Django模版生成樹狀結(jié)構(gòu)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python實(shí)現(xiàn)三次樣條插值

    python實(shí)現(xiàn)三次樣條插值

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)三次樣條插值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 解決Pycharm出現(xiàn)的部分快捷鍵無(wú)效問(wèn)題

    解決Pycharm出現(xiàn)的部分快捷鍵無(wú)效問(wèn)題

    今天小編就為大家分享一篇解決Pycharm出現(xiàn)的部分快捷鍵無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 在Python中使用Neo4j的方法

    在Python中使用Neo4j的方法

    今天小編就為大家分享一篇關(guān)于在Python中使用Neo4j的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 基于Python的XSS測(cè)試工具XSStrike使用方法

    基于Python的XSS測(cè)試工具XSStrike使用方法

    XSS(Cross Site Scripting,跨站腳本攻擊)是一類特殊的Web客戶端腳本注入攻擊手段,通常指攻擊者通過(guò)“HTML注入”篡改了網(wǎng)頁(yè),插入惡意的腳本,從而在用戶瀏覽網(wǎng)頁(yè)時(shí)控制瀏覽器的一種攻擊。
    2017-07-07

最新評(píng)論

肇州县| 武定县| 浪卡子县| 南溪县| 吴堡县| 丹巴县| 德江县| 桃源县| 棋牌| 舒城县| 银川市| 河池市| 九台市| 中方县| 饶平县| 巨鹿县| 寿宁县| 合江县| 夏邑县| 龙游县| 隆回县| 重庆市| 澎湖县| 墨竹工卡县| 峡江县| 海阳市| 营山县| 来安县| 辉南县| 浙江省| 鹤庆县| 阳曲县| 松滋市| 常熟市| 高邮市| 略阳县| 平遥县| 青神县| 子长县| 新巴尔虎左旗| 陇西县|