【发布时间】:2018-12-12 14:53:05
【问题描述】:
这是我的代码:
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_())
我移动得越慢,得到的 rect 鬼影越多(左图越慢)。
首先我希望我的代码能正确理解双缓冲技术。如果不是请指出。
我知道这是由于调用了太多的paintEvent() 引起的。我想知道如何在不删除 mouseMoveEvent() 的情况下使其正确,因为我希望用户在绘制矩形时一直看到它。
【问题讨论】: