pyqt5 graphicview 加载图片后点击图片后,在周围框选一个100*100的红色透明矩形,并返回矩形坐标 完整代码
时间: 2024-02-24 10:59:02 浏览: 66
好的,请参考下面的完整代码实现:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView, QGraphicsPixmapItem, QGraphicsRectItem
from PyQt5.QtGui import QPixmap, QColor, QPen, QBrush
from PyQt5.QtCore import Qt, QEvent
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建场景
self.scene = QGraphicsScene(self)
self.scene.setSceneRect(0, 0, 800, 600)
# 创建视图
self.view = QGraphicsView(self.scene, self)
self.view.setRenderHint(QPainter.Antialiasing)
self.view.setDragMode(QGraphicsView.ScrollHandDrag)
# 加载图片
self.pixmap = QPixmap('image.jpg')
self.pixmap_item = QGraphicsPixmapItem(self.pixmap)
self.scene.addItem(self.pixmap_item)
# 为视图添加事件过滤器
self.view.viewport().installEventFilter(self)
# 设置主窗口
self.setCentralWidget(self.view)
self.setGeometry(100, 100, 800, 600)
self.setWindowTitle('PyQt5 GraphicsView Demo')
self.show()
def eventFilter(self, obj, event):
if event.type() == QEvent.GraphicsSceneMousePress:
# 获取点击的坐标
pos = self.view.mapToScene(event.pos())
# 判断是否点击在图片区域内
if self.pixmap_item.contains(pos):
# 创建矩形
rect = QGraphicsRectItem(pos.x() - 50, pos.y() - 50, 100, 100)
rect.setPen(QPen(Qt.red, 2))
rect.setBrush(QBrush(QColor(255, 0, 0, 100)))
# 将矩形添加到场景中
self.scene.addItem(rect)
# 返回矩形坐标
print('Rect: ({}, {}, {}, {})'.format(rect.x(), rect.y(), rect.x() + rect.rect().width(), rect.y() + rect.rect().height()))
return super().eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
```
使用方法:
1. 将需要加载的图片放在程序所在的目录下,并将其命名为 `image.jpg`。
2. 运行程序后,点击图片中的任意位置即可在该位置周围框选一个 100x100 的红色透明矩形。
3. 在控制台输出该矩形的坐标信息,包括左上角的 x 坐标、y 坐标,以及右下角的 x 坐标、y 坐标。
阅读全文