You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:57:02