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

qq_40271026 2019-01-13 11:09:14
最近刚开始学习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()
...全文
787 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayestudent 2020-12-06
  • 打赏
  • 举报
回复
如果要实现辅助线,必须设置追踪鼠标,即self.setMouseTracking(True), 初始化时定义self.currentPoint = QPoint(0, 0), 然后在mouseMoveEvent中,对self.currentPoint赋值,调用self.update()刷新; 最后在paintEvent中双缓存绘图后进行辅助线的绘制。
ayestudent 2020-12-06
  • 打赏
  • 举报
回复
self.tempBoard = self.board.copy()

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧