pyqt5 控件graphicsView 怎么框选红色矩形,并返回矩形实际坐标
时间: 2024-02-23 16:01:12 浏览: 90
基于pyqt的自定义QGraphicsScene支持画矩形以及返回矩形的坐标
好的,下面是一个完整的示例程序,展示如何在 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.setStyleSheet("background-color: rgba(255, 0, 0, 50);")
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)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.graphics_view = GraphicsView(self)
self.scene = QGraphicsScene(self.graphics_view)
self.graphics_view.setScene(self.scene)
self.image = QImage("image.jpg")
self.pixmap = QPixmap.fromImage(self.image)
self.scene.addPixmap(self.pixmap)
self.setCentralWidget(self.graphics_view)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.setGeometry(500, 200, 800, 600)
window.show()
sys.exit(app.exec_())
```
在这个示例程序中,我们创建了一个继承自 QGraphicsView 的 GraphicsView 控件。我们在 GraphicsView 控件中重写了 mousePressEvent、mouseMoveEvent 和 mouseReleaseEvent 方法,实现了红色矩形框选并返回实际坐标的功能。在 MainWindow 中,我们将 GraphicsView 控件设置为中心窗口,并在场景中添加了一张图片作为背景。
当你运行程序后,你可以在 GraphicsView 控件中使用鼠标进行红色矩形框选,并在控制台中看到框选区域的实际坐标。
希望这个示例程序对你有所帮助!
阅读全文