pyqt5 graphicsView 加载显示图片,在图片上鼠标框选红色矩形并返回矩形在图片上的实际坐标
时间: 2023-12-22 20:06:08 浏览: 88
你可以通过以下步骤实现:
1. 创建一个 QGraphicsScene 对象,并将其设置为 GraphicsView 的场景;
2. 使用 QGraphicsPixmapItem 在 QGraphicsScene 中加载你的图片;
3. 实现一个自定义的 QGraphicsRectItem,用于绘制红色矩形,并将其添加到 QGraphicsScene 中;
4. 通过 QGraphicsView 的鼠标按下和松开事件,获取鼠标的起始和结束位置,并将其转换为 QGraphicsScene 坐标系下的位置;
5. 计算矩形的坐标并返回。
以下是一个简单的示例代码:
```python
from PyQt5.QtCore import Qt, QPointF, QRectF
from PyQt5.QtGui import QPixmap, QColor, QPainter
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QGraphicsRectItem, QApplication
class ImageWidget(QGraphicsView):
def __init__(self):
super().__init__()
# 创建一个 QGraphicsScene
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
# 加载图片
self.pixmap_item = QGraphicsPixmapItem(QPixmap('your_image_path'))
self.scene.addItem(self.pixmap_item)
# 创建一个自定义的矩形项
self.rect_item = MyRectItem()
self.rect_item.setPen(QColor(255, 0, 0)) # 设置红色边框
self.rect_item.hide() # 初始隐藏
self.scene.addItem(self.rect_item)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
# 鼠标左键按下时,记录起始位置
self.start_pos = self.mapToScene(event.pos())
self.rect_item.setRect(QRectF(self.start_pos, QSizeF()))
self.rect_item.show()
def mouseMoveEvent(self, event):
# 鼠标移动时,更新矩形大小
if event.buttons() == Qt.LeftButton:
end_pos = self.mapToScene(event.pos())
self.rect_item.setRect(QRectF(self.start_pos, end_pos).normalized())
def mouseReleaseEvent(self, event):
# 鼠标释放时,计算矩形坐标并返回
if event.button() == Qt.LeftButton:
end_pos = self.mapToScene(event.pos())
rect = QRectF(self.start_pos, end_pos).normalized()
rect_in_pixmap = self.pixmap_item.mapFromScene(rect)
print('矩形在图片上的实际坐标:', rect_in_pixmap.toRect())
class MyRectItem(QGraphicsRectItem):
def paint(self, painter, option, widget=None):
# 重写 paint 方法,使矩形中间透明
painter.setPen(self.pen())
painter.setBrush(QColor(255, 0, 0, 50))
painter.drawRect(self.rect())
if __name__ == '__main__':
app = QApplication([])
widget = ImageWidget()
widget.show()
app.exec_()
```
这段代码演示了如何在 PyQt5 的 GraphicsView 中加载图片,并在图片上鼠标框选红色矩形,最后返回矩形在图片上的实际坐标。
阅读全文