Я создал график с 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)