Как использовать sigPointsClicked в pyqtgraph

Я создал сюжет с pyqtgraph который отображает линию с точками:

self.gaussianPlot = GraphicsLayoutWidget()
self.gaussianPlot.resize(750, 250)    

energyPlot=self.gaussianPlot.addPlot(row=1, col=1)
energyPlot.plot(self.scfenergies, symbol='o')
energyPlot.sigPointsClicked.connect(self.gausclicked())

Я хотел бы определить, какая точка на energyPlot была нажата. Однако я получаю сообщение об ошибке:

Traceback (most recent call last):
File "/home/shrx/PycharmProjects/moldy/moldy.py", line 358, in readGaussian
energyPlot.sigPointsClicked.connect(self.gausclicked)
AttributeError: 'PlotItem' object has no attribute 'sigPointsClicked'

Как правильно использовать sigPointsClicked определить, какая точка была нажата?

ОБНОВИТЬ

После ответа @ Люка, вот как я переписал код:

self.energyPlot=self.gaussianPlot.addPlot(row=1, col=1)
self.energyPlotData=self.energyPlot.plot(self.scfenergies, symbol='o')
self.energyPlotData.sigPointsClicked.connect(self.gausclicked)

def gausclicked(self, points):
    print(points)
    print(self.energyPlot.listDataItems())

В результате я получаю:

<pyqtgraph.graphicsItems.PlotDataItem.PlotDataItem object at 0x7f1a18065678>
[<pyqtgraph.graphicsItems.PlotDataItem.PlotDataItem object at 0x7f1a18065678>]

Таким образом, нет никакого очевидного способа, которым я могу определить, какая точка в наборе данных была нажата? Это выглядит как sigPointsClicked возвращает весь набор данных.

ОБНОВЛЕНИЕ 2

Окончательное исправление было необходимо добавить второй аргумент gausclicked функция:

def gausclicked(self, item, points):
    print(points)

1 ответ

Решение

Есть два разных класса, которые нужно отслеживать:

  • PlotItem содержит всю область графика, включая оси, окно просмотра и все данные, содержащиеся в нем. Этот тип возвращается GraphicsLayoutWidget.addPlot(), Как указывает на ошибку, он не имеет sigPointsClicked,

  • PlotDataItem отвечает за рисование линий и точек для одного набора данных. Этот класс имеет sigPointsClicked сигнал и возвращается при звонке PlotItem.plot(...),

Другие вопросы по тегам