pyqt5 graphicview 加载图片后点击图片后,在周围框选一个100*100的红色透明矩形,并返回矩形坐标 完整代码
时间: 2024-02-24 07:59:19 浏览: 46
以下是一个示例代码,该代码使用 PyQt5 中的 QGraphicsView 和 QGraphicsScene 类来加载图片,并在单击图片时在其周围绘制一个红色透明矩形。矩形的大小为 100x100,单击后控制台将打印矩形的坐标。
```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()
print(rect.x(), rect.y(), rect.width(), rect.height())
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_())
```
在此示例中,我们创建了一个名为 GraphicsView 的 QGraphicsView 子类,该子类包含一个名为 GraphicsScene 的 QGraphicsScene 子类。我们在 GraphicsScene 中加载图像,并使用 QGraphicsRectItem 绘制矩形。我们还重写了鼠标事件处理程序来捕获鼠标事件并更新矩形的大小和位置。最后,我们在控制台中打印矩形的位置。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)