2016-02-20 6 views
4

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

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

EDIT! - После внедрения контентов leongold код может возвращать позицию mousecursor без потери скорости. Код состоит в следующем:

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() 

ответ

3

Вам нужно настроить 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.