Как использовать 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(...)
,