Вот мой код:
import sys
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtWidgets import QApplication, QWidget
class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.resize(600, 600)
self.pix = QPixmap(600, 600)
self.pix.fill(Qt.white)
self.begin_point = QPoint()
self.end_point = QPoint()
def paintEvent(self, QPaintEvent):
painter = QPainter(self)
x = self.begin_point.x()
y = self.begin_point.y()
w = self.end_point.x()-x
h = self.end_point.y()-y
painter2 = QPainter(self.pix) # paint on a QPixmap first
painter2.drawRect(x, y, w, h)
painter.drawPixmap(0, 0, self.pix) # then pain on the widget
def mousePressEvent(self, QMouseEvent):
if QMouseEvent.button() == Qt.LeftButton:
self.begin_point = QMouseEvent.pos()
self.end_point = self.begin_point
def mouseMoveEvent(self, QMouseEvent):
if QMouseEvent.buttons() == Qt.LeftButton:
self.end_point = QMouseEvent.pos()
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
Чем медленнее я двигаюсь, тем больше призрачных изображений прямоугольника получаю (левое - медленнее).
![enter image description here](https://i.stack.imgur.com/9b7oo.jpg)
Сначала я надеюсь, что мой код показывает правильное понимание технологии двойной буферизации.Пожалуйста, укажите это, если нет.
Я знаю, что это вызвано слишком большим количеством вызовов paintEvent ().Я хочу знать, как сделать это правильно, не удаляя mouseMoveEvent (), потому что я хочу, чтобы пользователи постоянно видели прямоугольник, когда рисуют его.