pyqt5画直线时如何实现鼠标移动实时动态显示直线,但只有松开鼠标才进行绘制?

qq_40271026 qq_40271026 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近刚开始学习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()
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
qq_40271026
脚本语言 37,738 成员 34,208 内容