如何获取加载图像的坐标而不是显示器上的坐标

2024-06-30 15:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个带有按钮的图像查看器,当点击它时,可以获得加载图像的坐标。然而,当我放大图像并点击它时,我得到了图像片段所在的显示坐标,而与图像在正方形内的中心位置无关。我想要的是被点击的加载图像的坐标。这意味着,如果显示中的图像被缩放或滚动(上/下或右/左),坐标应相应地调整。这可能是一个简单的问题和一个简单的答案,但是我在这个问题上被困了一个多星期,尽管我试图理解Qt website的文档没有成功

例如,我试图替换线路

self.photo_clicked.emit(QtCore.QPoint(event.pos()))

通过

self.photo_clicked.emit(QtCore.QPoint(QGraphicsView.mapFromScene(event.pos())))

但它给了我一个错误:

TypeError: descriptor 'mapFromScene' requires a 'PySide2.QtWidgets.QGraphicsView' object but received a 'PySide2.QtCore.QPoint'

以下是脚本(其中一部分灵感来自this example):

^{pr2}$

Tags: pos图像selfevent中心按钮emitphoto
1条回答
网友
1楼 · 发布于 2024-06-30 15:19:10

当你缩放并按下一个像素时,这可以代表一组像素,反之亦然,我想你明白了,因为显示图像是向下采样或上扫描,视情况而定。最终,不管它是什么,你都会得到一个不理想的像素,但是非常接近。说到重点,考虑到在@ekhumuro的实现中没有项目的升级,使用相对于项目坐标系而不是场景的鼠标位置是正确的,因为项目可以移动,因此考虑到项目未转换的一般解决方案是:

def mousePressEvent(self, event):
    if self._photo.isUnderMouse():
        p = self._photo.mapToItem(self._photo, self.mapToScene(event.pos()))
        self.photoClicked.emit(p.toPoint())
    super(PhotoViewer, self).mousePressEvent(event)

相关问题 更多 >