如何在Qgraphicscene中绘制矩形?

时间:2019-08-23 09:43:42

标签: python pyqt pyqt5

enter image description here

我试图在QGraphicscene中绘制一个矩形以选择QGraphicsitem的一部分。

我尝试了以下代码,但未按预期工作,也未显示任何错误和预期结果

from PyQt5.QtCore import (QByteArray, QDataStream, QIODevice, QMimeData, QPointF, QPoint, Qt, QEvent, QCoreApplication,QRect,QSize,QSortFilterProxyModel,QRegExp)
from PyQt5.QtGui import QColor, QDrag, QPainter, QPixmap, QBrush,QCursor,QPolygon, QLinearGradient, QIcon, QPen, QPainterPath, QTransform,QStandardItem,QStandardItemModel
from PyQt5.QtWidgets import QGraphicsScene, QMainWindow, QAction,  QGraphicsView, QGraphicsItem
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtGui import QPainter

class MyWidget(QGraphicsView):
    def __init__(self):
        super().__init__()

        self.scene=QGraphicsScene()
        self.setSceneRect(0,0,600,600)
        self.setScene(self.scene)
        self.scene.setItemIndexMethod(QGraphicsScene.NoIndex)
        self.scene.setBackgroundBrush(QBrush(Qt.black))
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        self.targetForLine=QRect()
        self.show()

    def mousePressEvent(self, event):
        self.target = self.TargPosForLine((event.pos()), "ForRect")#Geometry of rectangle
        qp=QPainter()
        qp.setPen(QColor(Qt.red))
        br = QBrush(QColor(Qt.red))
        qp.setBrush(br)
        qp.drawRect(QRect(self.target))
        # qp.drawRect(10,10,100,100)

        self.update()

    def TargPosForLine(self, position, mode):

        self.clicked_column = int((position.y() // 16)) * 16
        self.clicked_row = int((position.x() // 16)) * 16
        if self.clicked_column < 0:
            self.clicked_column = 0
        if self.clicked_row < 0:
            self.clicked_row = 0
        if (mode == "ForRect"):
            return QRect(self.clicked_row, self.clicked_column, 16, 16)


    def mouseMoveEvent(self, event):
        self.end = event.pos()
        self.update()
    #
    # def mouseReleaseEvent(self, event):
    #     self.scene.removeItem(qp)
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    app.aboutToQuit.connect(app.deleteLater)
    sys.exit(app.exec_())

0 个答案:

没有答案