通过点击pyqt5graph图像获取精确的数据索引(不仅仅是像素值)

时间:2017-09-14 06:45:35

标签: pyqtgraph

我是PyqtGraph的新手(事实上这是我的第一次)

我有一个Qt设计器文件,我在我的python代码中导入。我在6个窗口中绘制了一个42x22(不同大小)作为图像,这些已被提升为图形视图。

我有一个6x42x22的数据集,所以我使用for循环来绘制6个图像

 for n in range(imageStackSize):
            self.glayout = pg.GraphicsLayout()
            self.vb = self.glayout.addViewBox()
            self.vb.setAspectLocked(lock=True, ratio=self.aspect_ratio)
            img_temp = image[n, :, :]

和... ``

img = pg.ImageItem(img_temp,  lut=self.jet_lut)
                if n == 0:
                    self.ui.Channel1_img.setCentralItem(self.glayout)
                    self.vb.addItem(img)

            elif n == 1:
                self.ui.Channel2_img.setCentralItem(self.glayout)
                self.vb.addItem(img)

            elif n == 2:
                self.ui.Channel3_img.setCentralItem(self.glayout)
                self.vb.addItem(img)
            elif n == 3:
                self.ui.Channel4_img.setCentralItem(self.glayout)
                self.vb.addItem(img)
            elif n == 4:
                self.ui.Channel5_img.setCentralItem(self.glayout)
                self.vb.addItem(img)
            elif n == 5:
                self.ui.Channel6_img.setCentralItem(self.glayout)
                self.vb.addItem(img)

在此之后,我试图点击其中一个图像(理想情况下我想让它可以点击六个图像中的任何一个)来获得(6,x,y)协调的第一个维度不物。为了达到这个目的,我做了

self.ui.Channel1_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.Channel2_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.Channel3_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.Channel4_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.Channel5_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.Channel6_img.scene().sigMouseClicked.connect(self.onClick)
    #self.ui.PMTVoltage_plt.scene().sigMouseClicked.connect(self.onClick)

def onClick(自我,事件):         打印("点击的&#34)

然后我试了

items = self.ui.Channel1_img.imageItem.mapFromViewToItem(event.pos())

 items = self.ui.Channel1_img.imageItem.mapFromSceneToView(event.pos())

但是编程只是崩溃了。我在某处看到坐标在视图框中,但我似乎无法在self.ui.Channel1_img中找到viewbox或vb

我在调试中浏览了整个ui变量,以查找vb或图像项目,但找不到它。

事实上,我发现的唯一的事情就是,

items = {dict} {<pyqtgraph.graphicsItems.ViewBox.ViewBox.ViewBox 
  object at 0x000001CF73888CA8>: [(0, 0)]}
  <pyqtgraph.graphicsItems.ViewBox.ViewBox.ViewBox object at 
   0x000001CF73888CA8> (1990508186792) = {list} <class 'list'>: [(0, 0)]
   0 = {tuple} <class 'tuple'>: (0, 0)
   0 = {int} 0
   1 = {int} 0
    __len__ = {int} 2
    __len__ = {int} 1
    __len__ = {int} 1
我错过了什么?任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

好的我明白了,这是我可能有同样问题的人的解决方案

我使用它作为imageItem

绘制数据
vb = pg.ViewBox()
    self.ui.PMTVoltage_plt.useOpenGL()
    self.ui.PMTVoltage_plt.setCentralItem(vb)
    self.img = pg.ImageItem(pmtImage)
    vb.addItem(self.img)

然后在其他函数中我使用getViewBox()恢复vb然后使用mapFromViewtoItem()

vb = self.ui.PMTVoltage_plt.getViewBox()
    items = vb.mapSceneToView(event.scenePos())
    pixels = vb.mapFromViewToItem(self.img, items)
    print(items)

希望这有帮助