python编程使用PyQt创建UE蓝图

 更新时间:2021年10月29日 00:00  点击:1996 作者:在逆境中蜕变

实现思路

1、场地部署:我们需要拥有一个可以用来画节点的地方!详看我这篇文章QGraphicsScene、QGraphicsView的基础使用,这篇文章用的也是同样的方法PyQt制作预览窗口(游戏中的小地图)
2、节点创建:我们需要自定义节点,也就是下图中的方框内的东西,主要涉及到的就是Qt中的QGraphicsItem,通过继承这个类来自定义节点样式
3、连线:涉及到的就是Qt中的QGraphicsLineItem,继承这个类,并在paint中自定义连线样式,比如我这里使用的是qt自带的贝塞尔曲线
实现的效果如下,节点之间可以通过端口互相连接

在这里插入图片描述

1、场地部署

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、节点创建

下面是创建节点的主体,就那个黑框框的东西

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)

下面是节点端口的创建

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)

在节点NodeItem里面,创建两个端口用于连接

3、连线

①首先是连线类的创建

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)

②如何连接节点

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

ps写在最后,如果你的图没有刷新,你可以先把窗口缩小再打开,他就会刷新了,如果你想让他自动刷新,就调用scene.update()方法吧!

以上就是python编程使用PyQt创建UE蓝图的详细内容,更多关于PyQt创建UE蓝图的资料请关注猪先飞其它相关文章!

原文出处:https://blog.csdn.net/weixin_40301728/article/details/111569

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • vue中activated的用法

    这篇文章主要介绍了vue中activated的用法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-01-03
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能

    这篇文章主要介绍了基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • Vue基于localStorage存储信息代码实例

    这篇文章主要介绍了Vue基于localStorage存储信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-16
  • vue 监听 Treeselect 选择项的改变操作

    这篇文章主要介绍了vue 监听 Treeselect 选择项的改变操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
  • Antd-vue Table组件添加Click事件,实现点击某行数据教程

    这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17
  • vue 实现动态路由的方法

    这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
  • Vue组件跨层级获取组件操作

    这篇文章主要介绍了Vue组件跨层级获取组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-28
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • Vue中slot-scope的深入理解(适合初学者)

    这篇文章主要给大家介绍了关于Vue中slot-scope的深入理解,这个教程非常适合初学者,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-17
  • vue treeselect获取当前选中项的label实例

    这篇文章主要介绍了vue treeselect获取当前选中项的label实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
  • vuejs element table 表格添加行,修改,单独删除行,批量删除行操作

    这篇文章主要介绍了vuejs element table 表格添加行,修改,单独删除行,批量删除行操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-18