Возврат координат курсора мыши в PyQtGraph

Я новичок в PyQtGraph и хочу использовать его для быстрой визуализации сбора данных. Раньше я использовал matplotlib, где перерисовка фигуры была моим узким местом. После перехода на PyQtGraph в настоящее время мне не хватает только одной функции matplotlib. А именно, возвращая координаты x и y моего курсора мыши.

Как я могу вызвать/имитировать возврат координат x и y моего курсора мыши на графике, созданном с использованием PyQtGraph?

ИЗМЕНИТЬ! - После реализации советов leongold, код способен возвращать позицию курсора мыши без потери скорости. Код следующий:

import numpy
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore

def gaussian(A, B, x):
  return A * numpy.exp(-(x/(2. * B))**2.)

def mouseMoved(evt):
  mousePoint = p.vb.mapSceneToView(evt[0])
  label.setText("<span style='font-size: 14pt; color: white'> x = %0.2f, <span style='color: white'> y = %0.2f</span>" % (mousePoint.x(), mousePoint.y()))


# Initial data frame
x = numpy.linspace(-5., 5., 10000)
y = gaussian(5., 0.2, x)


# Generate layout
win = pg.GraphicsWindow()
label = pg.LabelItem(justify = "right")
win.addItem(label)

p = win.addPlot(row = 1, col = 0)

plot = p.plot(x, y, pen = "y")

proxy = pg.SignalProxy(p.scene().sigMouseMoved, rateLimit=60, slot=mouseMoved)

# Update layout with new data
i = 0
while i < 500:
  noise = numpy.random.normal(0, .2, len(y))
  y_new = y + noise

  plot.setData(x, y_new, pen = "y", clear = True)
  p.enableAutoRange("xy", False)

  pg.QtGui.QApplication.processEvents()

  i += 1

win.close()

person The Dude    schedule 20.02.2016    source источник


Ответы (1)


Вам нужно настроить pyqtgraph.SignalProxy и подключить его к обратному вызову:

если p ваш участок, он будет выглядеть так: pyqtgraph.SignalProxy(p.scene().sigMouseMoved, rateLimit=60, slot=callback)

Всякий раз, когда мышь перемещается по графику, обратный вызов вызывается с event в качестве аргумента, то есть callback(event). event[0] содержит позиционный аргумент, который вы передаете p.vb.mapSceneToView(position).x() для значения x и p.vb.mapSceneToView(position).y() для значения y.

person leongold    schedule 20.02.2016