pyqt5怎么为控件 graphicsView 增加用鼠标框选矩形,并返回矩形在图片上的坐标的功能
时间: 2024-02-18 17:00:21 浏览: 64
你可以通过以下步骤为控件 `graphicsView` 增加用鼠标框选矩形,并返回矩形在图片上的坐标的功能:
1. 在 `graphicsView` 中加载图片,可以使用 `QPixmap` 或者 `QImage`,并把它设置为 `graphicsView` 的背景。
2. 在 `graphicsView` 中添加鼠标事件处理函数,用于处理鼠标按下、移动和释放事件。
```python
class GraphicsView(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
self.setScene(QGraphicsScene(self))
self.setMouseTracking(True)
self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
self.origin = QPoint()
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.origin = event.pos()
self.rubberBand.setGeometry(QRect(self.origin, QSize()))
self.rubberBand.show()
def mouseMoveEvent(self, event):
if self.rubberBand.isVisible():
self.rubberBand.setGeometry(QRect(self.origin, event.pos()).normalized())
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
rect = self.rubberBand.geometry()
if rect.width() > 10 and rect.height() > 10:
# 计算矩形在图片上的坐标
pixmap = self.scene().pixmap()
scale = pixmap.width() / self.width()
x = rect.left() * scale
y = rect.top() * scale
w = rect.width() * scale
h = rect.height() * scale
print("矩形在图片上的坐标:", int(x), int(y), int(w), int(h))
self.rubberBand.hide()
```
3. 在上述代码中,我们创建了一个 `QRubberBand` 对象用于绘制矩形框选区域,并通过鼠标事件处理函数实现了鼠标框选矩形的功能。
4. 在鼠标释放事件中,计算矩形在图片上的坐标,可以通过 `QGraphicsView.scene().pixmap()` 获取 `graphicsView` 中的图片,然后计算矩形在图片上的坐标。
5. 最后,在主程序中创建 `GraphicsView` 对象,并设置图片即可。
```python
if __name__ == '__main__':
app = QApplication(sys.argv)
view = GraphicsView()
view.setSceneRect(0, 0, 800, 600)
view.fitInView(QRectF(0, 0, 800, 600), Qt.KeepAspectRatio)
view.show()
# 加载图片
pixmap = QPixmap("test.jpg")
view.scene().addPixmap(pixmap)
sys.exit(app.exec_())
```
阅读全文