Как использовать 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, чтобы определить, какая точка была нажата?

ОБНОВЛЕНИЕ

Следуя ответу @Luke, вот как я переписал код:

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)

person shrx    schedule 26.01.2015    source источник


Ответы (1)


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

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

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

person Luke    schedule 27.01.2015
comment
Проверьте подпись сигнала: pyqtgraph.org/documentation/graphicsItems/plotdataitem.html Первый отправленный аргумент — это PlotDataItem, который был нажат; второй - список точек. - person Luke; 27.01.2015
comment
Спасибо, я прочитал эту документацию, но мне не было ясно, что она также выводит элемент, по которому щелкнули. - person shrx; 28.01.2015