最近剛開始學習pyqt5的繪圖功能,但不知道該怎么實作繪制中隨滑鼠移動動態顯示直線,但是只有當滑鼠松開時才進行繪制,加入滑鼠移動時間進行重繪又會造成大量重影,滑鼠移動時間去掉重繪命令又會造成繪制程序無圖松開滑鼠突然出現影像。另外還有這個雙緩沖技術好像也并不能解決問題。簡單來說,就是如何在pyqt5畫線時實作MFC中橡皮筋的功能。
目前寫的具體代碼如下,希望各位前輩們幫忙解答一下。
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class PaintBoard(QWidget):
def __init__(self, parent=None):
super(PaintBoard, self).__init__(parent)
self.initData()
self.initView()
def initData(self):
self.size = QSize(600, 900)
self.board = QPixmap(self.size)
self.board.fill(Qt.white) # 畫板填充為白色
self.IsEmpty = True # 初始默認為慷訓板
self.lastPoint = QPoint(0, 0)
self.endPoint = QPoint(0, 0)
# 輔助畫布
self.tempBoard = QPixmap()
self.isDrawing = False # 標志是否正在繪圖
def initView(self):
pass
def paintEvent(self, event):
painter = QPainter(self)
x = self.lastPoint.x()
y = self.lastPoint.y()
w = self.endPoint.x() - x
h = self.endPoint.y() - y
if self.isDrawing:
self.tempBoard = self.board
pen = QPainter(self.tempBoard)
pen.drawRect(x, y, w, h)
painter.drawPixmap(0, 0, self.tempBoard)
else:
pen = QPainter(self.board)
pen.drawRect(x, y, w, h)
painter.drawPixmap(0, 0, self.board)
def mousePressEvent(self, event):
# 按下滑鼠左鍵
if event.button() == Qt.LeftButton:
self.lastPoint = event.pos()
self.endPoint = self.lastPoint
self.isDrawing = True
def mouseReleaseEvent(self, event):
# 釋放滑鼠左鍵
if event.button() == Qt.LeftButton:
self.endPoint = event.pos()
# 重新繪制
self.update()
self.isDrawing = False
def mouseMoveEvent(self, event):
if event.buttons() and Qt.LeftButton:
self.endPoint = event.pos()
self.update()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230803.html
上一篇:怎么編制一個能計算常用統計量的類
下一篇:小白請教,按日期多列索引重復值
