Сохранять координаты, не меняющиеся для события нажатия мыши на plotWidget (pyqtgraph) после увеличения / уменьшения изображения - PullRequest
0 голосов
/ 22 апреля 2020

Я использую PyQt5 для разработки GUI для анализа изображений. Окно изображения разработано с использованием plotWidget, и поэтому пользователь может увеличивать / уменьшать отображаемое изображение с помощью мыши. Описание проблемы : когда пользователь щелкает позицию, программа вызывает событие щелчка мыши с обратным вызовом координаты (x, y) мыши на изображении. Однако после увеличения / уменьшения изображения обратный вызов координат в той же точке щелчка не меняется. (Я ожидал, что координаты должны измениться с увеличением / уменьшением ИЗОБРАЖЕНИЯ, а НЕ с абсолютными позициями относительно окна GUI).

Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 23 апреля 2020

Qt сообщает о положении мыши в пикселях относительно виджета, получающего событие мыши. Вам необходимо сопоставить положение мыши с системой координат изображения. Пример анализа изображений Pyqtgraph показывает один из способов сделать это - если вы получаете событие непосредственно из ImageItem, оно уже будет отображено для вас:

https://github.com/pyqtgraph/pyqtgraph/blob/develop/examples/imageAnalysis.py#L97

Альтернативой является составление карты самостоятельно:

import pyqtgraph as pg
import numpy as np

class PW(pg.PlotWidget):
    def __init__(self):
        pg.PlotWidget.__init__(self)
        self.img = pg.ImageItem(np.random.normal(size=(100, 100)))
        self.addItem(self.img)

    def mouseMoveEvent(self, ev):
        scene_pos = self.mapToScene(ev.pos())
        img_pos = self.img.mapFromScene(scene_pos)
        print(img_pos)
        return pg.PlotWidget.mouseMoveEvent(self, ev)

pg.mkQApp()
pw = PW()
pw.show()
...