Как я могу получить отдельные точки и их атрибуты из диаграммы рассеяния в pyqtgraph? - PullRequest
0 голосов
/ 29 октября 2019

Мне удалось без проблем создать ScatterPlotItem в pyqtgraph, добавив виджет графического представления в PlotWidget в Qt Designer. Я нанес на него некоторые случайные данные, и теперь я хочу получить доступ к отдельным точкам, на которые я нажимаю. В документах говорится, что можно подключить сигнал sigClicked (self, points), который теоретически должен возвращать точки под курсором. Но, похоже, это не так, потому что когда я щелкаю точку, я получаю один и тот же объект независимо от того, какую точку я щелкнул. Я подозреваю, что этот сигнал возвращает весь ScatterPlotItem, а не какую-либо конкретную точку.

Вот мой код на данный момент:

import sys, time
from timeit import default_timer as timer

from PyQt5 import QtGui
from PyQt5.QtCore import pyqtSlot, Qt, QPoint, QUrl, QEvent
from PyQt5.QtWidgets import *
from PyQt5 import QtMultimedia
from PyQt5.uic import loadUi
import pyqtgraph as pg

import numpy as np

class ScatterExample(QMainWindow):
    def __init__(self):

        # Main Loop
        super(ScatterExample, self).__init__()
        loadUi('<path/to/ui file>.ui', self)
        self.setWindowTitle('ScatterExample')

        self.scatter = pg.ScatterPlotItem(pxMode=False, pen=pg.mkPen(width=1, color='g'), symbol='t', size=1)
        self.scatter.sigClicked.connect(self.onPointsClicked)
        self.Scatter_Plot_View.addItem(self.scatter) # Scatter_Plot_View is the Graphics View I promoted to PlotWidget
        n = 5
        print('Number of points: ' + str(n))
        data = np.random.normal(size=(2, n))
        pos = [{'pos': data[:, i]} for i in range(n)]

        now = pg.ptime.time()
        self.scatter.setData(pos)
        print(self.scatter.data)


    def onPointsClicked(self, points):
        print('Ain\'t getting individual points ', points)
        points.setPen('b', width=2) # this turns EVERY point blue, not just the one clicked.

Приведенный выше оператор печати печатает:

Ain't getting individual points <pyqtgraph.graphicsItems.ScatterPlotItem.ScatterPlotItem object at 0x000001C36577F948>

Как получить точки, на которые я нажимаю, и соответствующие им атрибуты, такие как координаты x и y?

1 Ответ

0 голосов
/ 29 октября 2019

Поскольку eyllansec был достаточно любезен, я предложил изменить def onPointsClicked(self, points): на def onPointsClicked(self, obj, points):, и теперь pyqtgraph работает ожидаемо.

...