【pyqtgraph】pyqtgraph可移动竖线LineSegmentROI的拖拽事件相关

这篇博客介绍了如何在Python的PyQtgraph库中创建并拖动LineSegmentROI竖线。通过设置LineSegmentROI的参数并自定义拖动事件,实现了竖线在保持垂直方向位置不变的情况下,仅能水平移动的功能。博主详细阐述了生成竖线、取消handle拖动、重写拖动事件以及移动handle的方法,提供了具体的代码示例。
摘要由CSDN通过智能技术生成

情景

Python+PyQt+pyqtgraph读取数据绘图,并在图像上添加了LineSegmentROI带handle的竖线(hanlde是为了RectROI的拖动),现要实现竖线可以直接拖动,并在拖动后恢复到原来的纵方向位置,只改变拖动的横方向位置。

实现

生成竖线

官方文档是这样写的:
LineSegmentROI(positions=(None, None), pos=None, handles=(None, None), **args)
参数什么的就不具体说了,生成一条可移动的直线只需要传入起点终点坐标和movable参数即可。

import pyqtgraph as pg
# self.bottom和self.top是设置的竖线默认最低点和最高点的纵坐标,x为任意位置
self.line = pg.LineSegmentROI(([x, self.bottom], [x, self.top]), movable=True)

拖拽事件

# 取消handle的拖拽事件
for handle in self.line.getHandles():
	handle.mouseDragEvent = self.disable_drag_event()

def disable_drag_event(self, ev):
	return

# 重写竖线的拖拽事件
line.mouseDragEvent = new_drag_event()

def new_drag_event(self, ev):
	self.line.mouseDragHandler.mouseDragEvent(ev)  # 默认事件,需要重新实现
	finish = ev.finish  # 判断拖拽结束
	pos = self.get_mouse_pos()  # 获取鼠标当前位置(ev里有关于位置的不对劲)
	 
	self.on_line_moving(pos)  # 具体实现的方法

拖拽实现

self.line.setPos()存在问题,于是采用移动handle方法

def on_line_moving(self, pos):
	self.line.movePoint(self.line.getHadles()[0], [pos, self.bottom], finish=False)
	self.line.movePoint(self.line.getHadles()[1], [pos, self.top], finish=True)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值