pyqtgraph: как перетащить элемент графика

В настоящее время пытается построить точечный график в pyqtgraph и пытается перетащить элементы графика, но не может найти подход. Уже посмотрел события GraphicsScene sigMouseClicked, sigMouseMoved. Любые предложения приветствуются. Дайте мне знать, если с моей стороны потребуются какие-либо дополнительные подробности.

Пример кода, который я использую:

import pyqtgraph as pg
import numpy as np

w = pg.GraphicsWindow()
w.show()
x = [2,4,5,6,8];
y = [2,4,6,8,10];

pl = pg.PlotItem()
pl.plot(x, y, symbol='o')
w.addItem(pl)

person Versatile    schedule 17.03.2014    source источник


Ответы (1)


Посмотрите pyqtgraph/examples/CustomGraphItem.py. Подход заключается в создании подкласса GraphItem, который перехватывает события перетаскивания мышью и перемещает точку графика рассеяния, находящуюся под мышью:

def mouseDragEvent(self, ev):
    if ev.button() != QtCore.Qt.LeftButton:
        ev.ignore()
        return

    if ev.isStart():
        # We are already one step into the drag.
        # Find the point(s) at the mouse cursor when the button was first 
        # pressed:
        pos = ev.buttonDownPos()
        pts = self.scatter.pointsAt(pos)
        if len(pts) == 0:
            ev.ignore()
            return
        self.dragPoint = pts[0]
        ind = pts[0].data()[0]
        self.dragOffset = self.data['pos'][ind] - pos
    elif ev.isFinish():
        self.dragPoint = None
        return
    else:
        if self.dragPoint is None:
            ev.ignore()
            return

    ind = self.dragPoint.data()[0]
    self.data['pos'][ind] = ev.pos() + self.dragOffset
    self.updateGraph()
    ev.accept()
person Luke    schedule 17.03.2014
comment
Спасибо за ответ, но я не могу найти соответствующий пример в своей папке. Не могли бы вы поделиться полным примером здесь для моего понимания. - person Versatile; 18.03.2014
comment
Извините, возможно, это еще не выпущено: github.com/pyqtgraph/ pyqtgraph/blob/разработка/примеры/ - person Luke; 18.03.2014