pyqt5 graphicsView 加载显示图片,在图片上鼠标框选红色矩形并返回矩形在图片上的坐标 完整代码
时间: 2024-02-24 14:55:29 浏览: 125
好的,这是一个使用 PyQt5 中的 QGraphicsView 加载并显示图片,并允许用户在图片上进行鼠标框选红色矩形并返回矩形在图片上的坐标的完整代码:
```python
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class GraphicsView(QGraphicsView):
def __init__(self, parent=None):
super(GraphicsView, self).__init__(parent)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.setDragMode(QGraphicsView.RubberBandDrag)
self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
self.setRenderHint(QPainter.Antialiasing)
self.setStyleSheet("background-color:white;")
def setImage(self, image_path):
self.image = QImage(image_path)
self.image_item = QGraphicsPixmapItem(QPixmap.fromImage(self.image))
self.scene.addItem(self.image_item)
self.setSceneRect(self.image.rect())
def mousePressEvent(self, event):
self.origin = event.pos()
self.rubberBand.setGeometry(QRect(self.origin, QSize()))
self.rubberBand.show()
super(GraphicsView, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if self.rubberBand.isVisible():
self.rubberBand.setGeometry(QRect(self.origin, event.pos()).normalized())
super(GraphicsView, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if self.rubberBand.isVisible():
rect = self.rubberBand.geometry()
rect = self.mapToScene(rect).boundingRect().toRect()
self.emit(SIGNAL("selectionChanged(QRect)"), rect)
self.rubberBand.hide()
super(GraphicsView, self).mouseReleaseEvent(event)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle("Image Viewer")
self.setGeometry(100, 100, 800, 600)
self.view = GraphicsView(self)
self.setCentralWidget(self.view)
self.view.selectionChanged.connect(self.onSelectionChanged)
self.view.setImage("test.jpg")
def onSelectionChanged(self, rect):
print("Selected Rect:", rect)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个代码中,我们创建了一个继承自 QGraphicsView 的 GraphicsView 类,它可以加载并显示一张图片,并允许用户在图片上进行鼠标框选红色矩形。当用户完成鼠标拖动并松开鼠标时,我们会发射一个自定义的 selectionChanged 信号,并传递矩形在图片上的坐标给槽函数 onSelectionChanged 处理。在这个例子中,我们将矩形的坐标打印在控制台上,你也可以根据需要对其进行其他处理。
阅读全文