【问题标题】:How to use sigPointsClicked in pyqtgraph如何在 pyqtgraph 中使用 sigPointsClicked
【发布时间】:2015-03-25 00:59:47
【问题描述】:

我用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)

【问题讨论】:

    标签: pyqt4 pyqtgraph


    【解决方案1】:

    您需要跟踪两个不同的类:

    • PlotItem 包含整个绘图区域,包括轴、视图框和其中包含的所有数据。此类型由GraphicsLayoutWidget.addPlot() 返回。如错误所示,它没有sigPointsClicked

    • PlotDataItem 负责为单个数据集绘制线和点。此类具有sigPointsClicked 信号,并在您调用PlotItem.plot(...) 时返回。

    【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2018-08-09
    • 1970-01-01
    • 2014-11-24
    • 2020-03-20
    • 2020-07-09
    • 2020-07-30
    • 2019-05-06
    • 2021-01-31
    相关资源
    最近更新 更多