【利用pyqt5画一个可以自动伸缩和移动的曲线】

简单介绍一下,不多说,懂得都懂,避坑

SignalHandler 类:
这个类继承自 QObject,并且定义了一个 positionChanged 信号。
DraggableEllipseItem 类:
这个类继承自 QGraphicsEllipseItem,并且拥有一个 signal_handler 属性,该属性是一个 SignalHandler 实例。
在 mouseMoveEvent 方法中,当圆点移动时,触发 signal_handler 的 positionChanged 信号。
ExampleApp 类:
创建了两个 DraggableEllipseItem 圆点,并将它们添加到绘图场景中。
创建了一个 LineItem 对象,并将其添加到场景中。
连接 DraggableEllipseItem 的 signal_handler 的 positionChanged 信号到槽函数,当圆点移动时更新直线的起点和终点

LineItem 类

class LineItem(QGraphicsItem):
def init(self, start=QPointF(0, 0), end=QPointF(100, 100)):
super().init()
self.start = start
self.end = end
self.setFlag(QGraphicsItem.ItemIsMovable)
self.setFlag(QGraphicsItem.ItemIsSelectable)

def setStartPoint(self, point):
    """设置直线的起点。"""
    self.start = point
    self.update()

def setEndPoint(self, point):
    """设置直线的终点。"""
    self.end = point
    self.update()

def boundingRect(self):
    """定义绘制直线时的边界矩形。"""
    extra = (self.pen().width() + 20) / 2.0
    return QRectF(self.start, self.end).normalized().adjusted(-extra, -extra, extra, extra)

def shape(self):
    """返回直线的形状,用于碰撞检测。"""
    path = QPainterPath()
    pa
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值