pyqt5画线如何动态显示效果
下面的代码可以工作
-- coding: utf-8 --
"""
【简介】使用paintEvent在窗口实现划线例子
"""
import sys
from PyQt5.QtWidgets import QApplication ,QWidget
from PyQt5.QtGui import QPainter ,QPixmap,QPen
from PyQt5.QtCore import Qt , QPoint
class Winform(QWidget):
def __init__(self,parent=None): super(Winform,self).__init__(parent)
self.setWindowTitle("绘图例子")
self.pix = QPixmap() # 实例化一个 QPixmap 对象
self.lastPoint = QPoint() # 起始点
self.endPoint = QPoint() #终点
self.initUi()
self.bline=0
def initUi(self):
#窗口大小设置为600*500
self.resize(600, 500)
# 画布大小为400*400,背景为白色
self.pix = QPixmap(400, 400)
self.pix.fill(Qt.white)
# 重绘的复写函数 主要在这里绘制
def paintEvent(self, event):
pp = QPainter(self.pix)
pen = QPen() # 定义笔格式对象
pen.setWidth(10) # 设置笔的宽度
pp.setPen(pen) #将笔格式赋值给 画笔
# 根据鼠标指针前后两个位置绘制直线
pp.drawLine(self.lastPoint, self.endPoint)
# 让前一个坐标值等于后一个坐标值,
# 这样就能实现画出连续的线
#self.lastPoint = self.endPoint
painter = QPainter(self)
painter.drawPixmap(0, 0, self.pix) # 在画布上画出
'''
#鼠标按压事件
def mousePressEvent(self, event) :
# 鼠标左键按下
if event.button() == Qt.LeftButton :
self.lastPoint = event.pos()
self.endPoint = self.lastPoint
'''
'''
# 鼠标移动事件
def mouseMoveEvent(self, event):
# 鼠标左键按下的同时移动鼠标
if event.buttons() and Qt.LeftButton :
self.endPoint = event.pos()
#进行重新绘制
self.update()
'''
# 鼠标释放事件
def mouseReleaseEvent( self, event):
# 鼠标左键释放
if event.button() == Qt.LeftButton :
'''
self.endPoint = event.pos()
#进行重新绘制
self.update()
'''
if self.bline==0:
self.lastPoint = event.pos()
self.bline=1
else:
self.endPoint = event.pos()
self.bline=0
#进行重新绘制
self.update()
if name == "__main__":
app = QApplication(sys.argv) form = Winform()
form.show()
sys.exit(app.exec_())
下面的代码没有达到我想要的效果,希望鼠标移动时临时显示画线
-- coding: utf-8 --
"""
【简介】使用paintEvent在窗口实现划线例子
"""
import sys
from PyQt5.QtWidgets import QApplication ,QWidget
from PyQt5.QtGui import QPainter ,QPixmap,QPen
from PyQt5.QtCore import Qt , QPoint
class Winform(QWidget):
def __init__(self,parent=None): super(Winform,self).__init__(parent)
self.setWindowTitle("绘图例子")
self.pix = QPixmap() # 实例化一个 QPixmap 对象
self.pix2 = QPixmap() # 实例化一个 QPixmap 对象
self.lastPoint = QPoint() # 起始点
self.endPoint = QPoint() #终点
self.endPoint2 = QPoint() #终点
self.initUi()
self.bline=0
def initUi(self):
#窗口大小设置为600*500
self.resize(600, 500)
# 画布大小为400*400,背景为白色
self.pix = QPixmap(400, 400)
self.pix.fill(Qt.white)
# 重绘的复写函数 主要在这里绘制
def paintEvent(self, event):
if self.bline:
pp = QPainter(self.pix2)
pen = QPen() # 定义笔格式对象
pen.setWidth(3) # 设置笔的宽度
#pen.setColor(Red) # 设置笔
pp.setPen(pen) #将笔格式赋值给 画笔
# 根据鼠标指针前后两个位置绘制直线
pp.drawLine(self.lastPoint, self.endPoint2)
# 让前一个坐标值等于后一个坐标值,
# 这样就能实现画出连续的线
#self.lastPoint = self.endPoint
painter = QPainter(self)
painter.drawPixmap(0, 0, self.pix2) # 在画布上画出
else:
pp = QPainter(self.pix)
pen = QPen() # 定义笔格式对象
pen.setWidth(3) # 设置笔的宽度
pp.setPen(pen) #将笔格式赋值给 画笔
# 根据鼠标指针前后两个位置绘制直线
pp.drawLine(self.lastPoint, self.endPoint)
# 让前一个坐标值等于后一个坐标值,
# 这样就能实现画出连续的线
#self.lastPoint = self.endPoint
painter = QPainter(self)
painter.drawPixmap(0, 0, self.pix) # 在画布上画出
'''
#鼠标按压事件
def mousePressEvent(self, event) :
# 鼠标左键按下
if event.button() == Qt.LeftButton :
self.lastPoint = event.pos()
self.endPoint = self.lastPoint
'''
# 鼠标移动事件
def mouseMoveEvent(self, event):
if self.bline :
self.endPoint2 = event.pos()
#进行重新绘制
self.update()
'''
# 鼠标左键按下的同时移动鼠标
if event.buttons() and Qt.LeftButton :
self.endPoint = event.pos()
#进行重新绘制
self.update()
'''
# 鼠标释放事件
def mouseReleaseEvent( self, event):
# 鼠标左键释放
if event.button() == Qt.LeftButton :
'''
self.endPoint = event.pos()
#进行重新绘制
self.update()
'''
if self.bline==0:
self.lastPoint = event.pos()
self.bline=1
else:
self.endPoint = event.pos()
self.bline=0
#进行重新绘制
self.update()
if name == "__main__":
app = QApplication(sys.argv) form = Winform()
form.show()
sys.exit(app.exec_())
以上是 pyqt5画线如何动态显示效果 的全部内容, 来源链接: utcz.com/p/938157.html