pyqt5 graphicsView 重写 mousePressEvent、mouseMoveEvent、mouseReleaseEvent,进行框选矩形,并返回实际坐标
时间: 2023-07-10 20:21:14 浏览: 195
QT学习之重写鼠标移动事件
好的,我理解了你的问题。以下是一个简单的示例,展示如何在 PyQt5 中使用 GraphicsView 进行矩形框选,并返回选中区域的实际坐标:
```python
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class GraphicsView(QGraphicsView):
def __init__(self, parent=None):
super(GraphicsView, self).__init__(parent)
self.setDragMode(QGraphicsView.RubberBandDrag)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.origin = event.pos()
self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
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 event.button() == Qt.LeftButton:
self.rubberBand.hide()
rect = self.viewport().rect().intersected(self.rubberBand.geometry())
rect_mapped = self.mapToScene(rect).boundingRect()
print(rect_mapped)
super(GraphicsView, self).mouseReleaseEvent(event)
```
在这个示例中,我们重写了 `mousePressEvent`、`mouseMoveEvent` 和 `mouseReleaseEvent` 方法。当鼠标按下左键时,我们创建了一个 `QRubberBand` 对象,并将其显示在视图中。随后,我们在 `mouseMoveEvent` 中更新了选中区域的位置和大小。最后,在 `mouseReleaseEvent` 中,我们隐藏了 `QRubberBand` 对象,并使用 `mapToScene` 方法将选中区域的坐标从视图坐标系转换为场景坐标系。
这个示例只是一个简单的框架,你可以根据自己的需求进行修改。希望对你有所帮助!
阅读全文