如何在pyqtgraph中使用sigPointsClicked
How to use sigPointsClicked in 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
returns 整个数据集。
更新 2
最后需要解决的问题是向 gausclicked
函数添加第二个参数:
def gausclicked(self, item, points):
print(points)
您需要跟踪两个不同的 classes:
PlotItem
包含整个绘图区域,包括轴、视图框和其中包含的所有数据。此类型由 GraphicsLayoutWidget.addPlot()
返回。如错误所示,它没有 sigPointsClicked
.
PlotDataItem
负责为单个数据集绘制线和点。此 class 具有 sigPointsClicked
信号,并在您调用 PlotItem.plot(...)
.
时返回
我用 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
returns 整个数据集。
更新 2
最后需要解决的问题是向 gausclicked
函数添加第二个参数:
def gausclicked(self, item, points):
print(points)
您需要跟踪两个不同的 classes:
PlotItem
包含整个绘图区域,包括轴、视图框和其中包含的所有数据。此类型由GraphicsLayoutWidget.addPlot()
返回。如错误所示,它没有sigPointsClicked
.PlotDataItem
负责为单个数据集绘制线和点。此 class 具有sigPointsClicked
信号,并在您调用PlotItem.plot(...)
. 时返回