from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QGraphicsRectItem, QGraphicsScene
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 自定义CustomScene
class CustomScene(QtWidgets.QGraphicsScene):
def __init__(self, parent=None):
QGraphicsScene.__init__(self, parent)
self.startPoint = 0
self.endPoint = 0
self.isDrawing = False
self.item = QGraphicsRectItem()
self.addItem(self.item)
self.pos = []
def mousePressEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
if not event.isAccepted():
if event.button() == Qt.LeftButton:
point = event.scenePos()
self.startPoint = point
self.isDrawing = True
elif event.button() == Qt.RightButton:
# 检测光标下是否有item
itemToRemove = None
for item in self.items(event.scenePos()):
if item.type() == QGraphicsRectItem.Type:
itemToRemove = item
break;
# 从Scene上移除item
if itemToRemove != None:
self.removeItem(itemToRemove)
def mouseMoveEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
if event.buttons() and Qt.LeftButton:
point = event.scenePos()
self.endPoint = point
if self.endPoint.x() - self.startPoint.x() > 20 and self.endPoint.y() - self.startPoint.y() > 20:
self.removeItem(self.item)
p = QPen()
p.setWidth(2)
p.setColor(QColor(0, 0, 0))
self.item.setPen(p)
self.item.setRect(self.startPoint.x(), self.startPoint.y(), self.endPoint.x()-self.startPoint.x(), self.endPoint.y()-self.startPoint.y())
self.addItem(self.item)
def mouseReleaseEvent(self, event: QtWidgets.QGraphicsSceneMouseEvent) -> None:
if event.button() == Qt.LeftButton:
self.mouseMoveEvent(event)
point = event.scenePos()
self.endPoint = point
pos = [(self.startPoint.x(), self.startPoint.y()), (self.endPoint.x(), self.endPoint.y())]
self.pos = pos
def keyPressEvent(self, event: QtGui.QKeyEvent) -> None:
if event.key() == Qt.Key_Backspace:
while not self.selectedItems().isEmpty():
self.removeItem(self.selectedItems().front())
else:
self.keyPressEvent(event)
def rtnPos(self):
return self.pos
基于pyqt的自定义QGraphicsScene支持画矩形以及返回矩形的坐标
需积分: 38 97 浏览量
2022-03-09
10:37:46
上传
评论 2
收藏 1KB ZIP 举报
RoWe98
- 粉丝: 40
- 资源: 6
评论0