python - 从 pyqtgraph 获取 imageitem 值

标签 python pyqt pyqtgraph

我正在开发我的第一个 PyQt 程序,感觉我缺少一些关于 ImageItems 或 GraphicsScenes 的明显内容。我有一个使用 ImageView 与 PyQtGraph 显示的 2d ImageItem。我的数据是一个 numpy 数组。当鼠标悬停在图像上的某个点上时,我可以获得 x 和 y 位置值,但也想知道图像/z/数组值。我发现了一个类似的问题,显示如何获取 x 和 y 值,但不是图像值。我包含了我目前在 Windows 中使用 PyQt4 和 python 2.7 的代码以及另一篇文章的链接。

https://groups.google.com/forum/#!topic/pyqtgraph/srQqVW9bqPg

    import pyqtgraph as pg

    self.image = pg.ImageView(self)
    self.image.show()
    self.image.setImage(data)

    self.image.scene.sigMouseMoved.connect(self.mouseMoved)

    def mouseMoved(self, pos):
        x = self.image.getImageItem().mapFromScene(pos).x()
        y = self.image.getImageItem().mapFromScene(pos).y()

这获取了 x 和 y 的值,但我不知道如何将它们转换为数组索引或以其他方式获取 z 值。如果有比 mapFromScene 更好的方法,那也很高兴知道。

最佳答案

查看source code ImageView.setData中,看来image成员是用来存储数据的。

尽管它是一个公共(public)成员,但它不是一个很好的 getter 属性并且没有记录。如果您不喜欢使用它,您可能需要在类中存储对数据的引用。也就是说,创建一个 self.data 成员。

def mouseMoved(self, viewPos):

    data = self.image.image  # or use a self.data member
    nRows, nCols = data.shape 

    scenePos = self.image.getImageItem().mapFromScene(viewPos)
    row, col = int(scenePos.y()), int(scenePos.x())

    if (0 <= row < nRows) and (0 <= col < nCols):
        value = data[row, col]
        print("pos = ({:d}, {:d}), value = {!r}".format(row, col, value))
    else:
        print("no data at cursor")

关于python - 从 pyqtgraph 获取 imageitem 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021869/

相关文章:

python - PyQtGraph - 如何关闭绘图窗口/关闭所有绘图窗口?

python - 有没有办法在 Python 中获取分数的重复小数部分?

python - 将换行符和 XML 标签替换为 ','

python - 我们如何以编程方式获取 Python 中的异常列表?

python - 使用 {tuple :float} format 来自 dict 的 x 和 y 标签在 python matplotlib 中创建热图

python - 如何控制QGroupBox调整大小

qt - 在 QtWebView 中捕获链接点击并在默认浏览器中打开

python - PyQt 通用科学软件模式 : Tree and Settings Box

python - 更新 PyQt4 中的 n 个 PlotWidgets 以进行实时绘图

python - pyqt图: how to know the size of a TextItem?