如何在pyqtgraph中获取pg.InfiniteLine控件被移动的事件
pyqtgraph InfiniteLine 拖动事件绑定方法
可以直接使用pg.InfiniteLine内置的信号实现需求,不需要自定义事件监听。
常用信号说明
sigPositionChanged:只要线的位置发生变化就会触发(包括鼠标拖动过程中实时触发、通过代码修改线位置时也会触发),完全符合你要的v_bar.xxx.connect(update)的绑定形式sigPositionChangeFinished:仅在用户鼠标拖动结束、松开按键时触发,适合不需要实时响应、只需要处理最终位置的场景
最简绑定示例
你需要的绑定写法可以直接写成:
v_bar.sigPositionChanged.connect(update)
对应的槽函数可以直接接收线实例作为参数,示例:
def update(line): # 获取垂直线当前的x轴位置 current_x = line.value() # 你自己的更新逻辑写在这里
如果是创建的水平参考线(angle=0),value()方法返回的就是对应y轴的坐标值,用法完全一致。
完整可运行演示代码
import pyqtgraph as pg from PyQt5.QtWidgets import QApplication app = QApplication([]) win = pg.PlotWidget() win.show() # 创建可移动的垂直线,初始位置x=5 v_bar = pg.InfiniteLine(angle=90, movable=True, pos=5) win.addItem(v_bar) # 实时响应位置变化的槽函数 def on_line_moved(line): current_pos = line.value() print(f"实时位置: {current_pos:.2f}") # 仅在拖动结束时触发的槽函数 def on_move_finished(line): print(f"拖动结束,最终位置: {line.value():.2f}") # 绑定对应信号 v_bar.sigPositionChanged.connect(on_line_moved) v_bar.sigPositionChangeFinished.connect(on_move_finished) app.exec_()
内容的提问来源于stack exchange,提问作者eggplants
相关产品推荐
相关产品推荐

