pyqt5 graphicsView 加载显示图片,有如下功能:1、滑动滚轮可以根据鼠标位置进行放大缩小,可以在图片上用鼠标框选矩形,并返回矩形在图片上的实际坐标
时间: 2024-02-23 20:00:46 浏览: 78
可以使用以下代码实现:
```python
import sys
from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtGui import QPixmap, QColor, QPainter
from PyQt5.QtWidgets import QGraphicsScene, QGraphicsView, QGraphicsRectItem, QApplication
class ImageViewer(QGraphicsView):
def __init__(self, pixmap):
super().__init__()
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setRenderHint(QPainter.Antialiasing)
self.setDragMode(QGraphicsView.ScrollHandDrag)
self.setFixedSize(pixmap.width(), pixmap.height())
self.rect_item = None
self.scene.addPixmap(pixmap)
def wheelEvent(self, event):
delta = event.angleDelta().y()
factor = 1.1 if delta > 0 else 0.9
zoom_point = self.mapToScene(event.pos())
self.scale(factor, factor)
self.centerOn(zoom_point)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
pos = event.pos()
scene_pos = self.mapToScene(pos)
self.rect_item = QGraphicsRectItem(QRectF(scene_pos, scene_pos))
self.rect_item.setPen(QColor(255, 0, 0))
self.scene.addItem(self.rect_item)
def mouseMoveEvent(self, event):
if self.rect_item is not None:
pos = event.pos()
scene_pos = self.mapToScene(pos)
rect = QRectF(self.rect_item.rect().topLeft(), scene_pos).normalized()
self.rect_item.setRect(rect)
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
if self.rect_item is not None:
rect = self.rect_item.rect()
image_rect = QRectF(0, 0, self.scene.width(), self.scene.height())
if rect.intersects(image_rect):
rect = rect.intersected(image_rect)
transform = self.transform().inverted()[0]
rect = transform.mapRect(rect)
x, y, w, h = rect.getCoords()
print(f"Selected Rect: ({x}, {y}, {w}, {h})")
self.scene.removeItem(self.rect_item)
self.rect_item = None
if __name__ == '__main__':
app = QApplication(sys.argv)
pixmap = QPixmap('image.jpg')
viewer = ImageViewer(pixmap)
viewer.show()
sys.exit(app.exec_())
```
这段代码实现了以下功能:
1. 加载并显示图片。
2. 使用滚轮可以放大缩小图片,并以鼠标位置为中心。
3. 使用鼠标在图片上框选矩形,并返回矩形在图片上的实际坐标。
阅读全文