[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(12)——如何创建可拖拽式连线

目标

在这里插入图片描述
完成各节点间的连线

实现

由于涉及到要创建新的edge和删除edge,那么就得编写与之相关的代码。

增加删除Edge

这就需要调用node_scene.py里面的
在这里插入图片描述
在这里插入图片描述
方法,来实现edge的增加和删除,于是需要在node_edge.py里添加如下代码

self.scene.addEdge(self)

获取通过socket获取对应的edge

首先就需要让Item_socket中有socket的属性

将node_graphics_socket.py的代码改写为
在这里插入图片描述
使其获得输入的Socket对象属性
而在socket类中将传入自己
在这里插入图片描述

抓取第一个点

    def leftMouseButtonPress(self,event):

        item = self.getItemAtClick(event)

        self.last_lmb_click_scene_pos = self.mapToScene(event.pos())

        if type(item) is QDMGraphicsSocket:
            if self.mode == MODE_NOOP:
                self.mode = MODE_EDGE_DRAG
                self.edgeDragStart(item)
                return

        if self.mode == MODE_EDGE_DRAG:
            res = self.edgeDragEnd(item)
            if res: return

        super().mousePressEvent(event)

    def edgeDragStart(self,item):
        self.previousEdge = item.socket.edge
        self.last_start_socket = item.socket
        self.dragEdge = Edge(self.grScene.scene, item.socket,None,EDGE_TYPE_BEZIER)

对左键点击事件进行小小的修改,并且引入edgeDragStart方法来专门处理抓取开始的第一个点

首先,获取第一个socket的edge,如果有就获得的是Edge对象,如果没有,则返回的是None
接着获得该item的socket
最后创建一个Edge

接下来就是解决这个如何创建一个edge一端连接着开始的socket一端连接着鼠标左键的虚线

抓取过程连线动画

首先在node_graphics_edge.py
为edge添加一个新画笔,绘制虚线

        self._pen_dragging = QPen(self._color)
        self._pen_dragging.setStyle(Qt.DashLine)
        self.</
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值