Qpainter PyQt5更新图像上的绘画

Qpainter PyQt5更新图像上的绘画,qpainter,Qpainter,使用PyQt5 QPaint在图像上绘制感兴趣的区域框,我希望能够随时间动态更新。在示例代码中,我在图像上绘制了一个矩形,等待1秒,在图像上绘制第二个矩形,然后在1秒后绘制第三个矩形。我希望前面的矩形消失。我遇到的问题是,矩形都是持久的。repaint()调用并没有像我所希望的那样彻底清除图形。有什么想法吗 from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QWidgets import QApplication, QMainWindow

使用PyQt5 QPaint在图像上绘制感兴趣的区域框,我希望能够随时间动态更新。在示例代码中,我在图像上绘制了一个矩形,等待1秒,在图像上绘制第二个矩形,然后在1秒后绘制第三个矩形。我希望前面的矩形消失。我遇到的问题是,矩形都是持久的。repaint()调用并没有像我所希望的那样彻底清除图形。有什么想法吗

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QPainter, QPen, QPixmap
from PyQt5.QtCore import Qt
import sys

class Window(QMainWindow):
     def __init__(self):
          super().__init__()

          self.setGeometry(150,150,500,500)
          self.ImageWindow = QtWidgets.QLabel(self)
          self.ImageWindow.setGeometry(QtCore.QRect(0,0,150,150))

          self.timer = QtCore.QTimer(self)

          self.state = 0

          self.timer.start(1)

          self.pixmap = QPixmap('marvel.png')
          self.pixmap.scaled(QtCore.Qsize(100,100))

          self.timer.timeout.connect(self.prepareDrawing)

     def prepareDrawing(self):
          self.state += 1
          self.timer.start(1000)
          self.ImageWindow.repaint()
          if self.state == 1:
               pen = QPen(Qt.red,2, Qt.SolidLine)
               self.drawRect(0,0,100,100,pen)
          elif self.state == 2:
               pen = QPen(Qt.blue,2, Qt.DashLine)
               self.drawRect(20,0,100,100,pen)
          elif self.state == 2:
               pen = QPen(Qt.green,2, Qt.DashDotLine)
               self.drawRect(40,0,50,50,pen)

     def drawRect(self,x,y,w,h,p):
          painter = QPainter(self)
          painter.begin(self.pixmap)
          painter.setPen(p)
          painter.drawRect(x,y,w,h)
          painter.end()
          self.ImageWindow.setPixmap(self.pixmap)
          self.show()

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())