PyQt5 Обновление картины на изображении - PullRequest
0 голосов
/ 08 января 2020

Использование PyQt5 QPainter для рисования области интереса на изображении, которое я хочу иметь возможность динамически обновлять с течением времени. В примере кода я рисую прямоугольник на изображении и, подождите 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())
...