pyqt5 graphicview 加载图片后点击图片后,在周围框选一个100*100的红色透明矩形,并返回矩形坐标 完整代码
时间: 2024-02-24 09:59:23 浏览: 21
以下是一个完整的示例代码,其中包含了加载图像、绘制矩形和获取矩形坐标的所有步骤:
```python
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class GraphicsScene(QGraphicsScene):
def __init__(self, parent=None):
super().__init__(parent)
self.image_item = QGraphicsPixmapItem()
self.addItem(self.image_item)
self.rect_item = QGraphicsRectItem()
self.addItem(self.rect_item)
self.rect_item.setPen(QPen(Qt.red))
self.rect_item.setBrush(QBrush(QColor(255, 0, 0, 50)))
self.rect_item.setVisible(False)
self.mouse_pressed = False
self.start_pos = None
self.end_pos = None
def load_image(self, filename):
self.image_item.setPixmap(QPixmap(filename))
self.setSceneRect(self.image_item.boundingRect())
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.mouse_pressed = True
self.start_pos = event.scenePos()
self.rect_item.setRect(QRectF(self.start_pos, QSizeF()))
self.rect_item.setVisible(True)
def mouseMoveEvent(self, event):
if self.mouse_pressed:
self.end_pos = event.scenePos()
width = self.end_pos.x() - self.start_pos.x()
height = self.end_pos.y() - self.start_pos.y()
rect = QRectF(self.start_pos, QSizeF(width, height)).normalized()
self.rect_item.setRect(rect)
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.mouse_pressed = False
if self.rect_item.isVisible():
rect = self.rect_item.rect()
if rect.width() == 100 and rect.height() == 100:
print(rect.x(), rect.y())
self.rect_item.setVisible(False)
class GraphicsView(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
self.setRenderHint(QPainter.Antialiasing)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setDragMode(QGraphicsView.ScrollHandDrag)
self.setScene(GraphicsScene(self))
def loadImage(self, filename):
self.scene().load_image(filename)
if __name__ == "__main__":
app = QApplication(sys.argv)
view = GraphicsView()
view.loadImage("example.jpg")
view.show()
sys.exit(app.exec_())
```
在这个代码中,我们在 GraphicsScene 的 `mouseReleaseEvent` 方法中添加了一些逻辑来检查矩形的大小是否为 100x100,并在控制台中打印矩形的左上角坐标。如果矩形不是 100x100,则什么都不做。