ADD file via upload

main
sztu202200202053 5 months ago
parent 53e237d492
commit e79e3db7db

@ -0,0 +1,134 @@
from PyQt5.QtWidgets import QWidget
from PyQt5.Qt import QPixmap, QPainter, QPoint, QPen, QColor, QSize
from PyQt5.QtCore import Qt
class PaintBoard(QWidget):
def __init__(self, Parent=None):
super().__init__(Parent)
# 先初始化数据,再初始化界面
self.__InitData()
self.__InitView()
def __InitData(self):
# 画板尺寸
self.__size = QSize(560, 560)
# 新建QPixmap作为画板尺寸为__size
self.__board = QPixmap(self.__size)
# 画板背景填充色(默认为白色)
self.__board.fill(Qt.white)
# 画板内容(默认为空)
self.__IsEmpty = True
# 橡皮擦模式(默认关闭)
self.EraserMode = False
# 上一次鼠标位置
self.__lastPos = QPoint(0, 0)
# 当前的鼠标位置
self.__currentPos = QPoint(0, 0)
# 新建绘图工具
self.__painter = QPainter()
# 画笔粗细(默认为 8
self.__thickness = 20
# 画笔颜色(默认为黑色)
self.__penColor = QColor("black")
# 获取颜色列表
self.__colorList = QColor.colorNames()
def __InitView(self):
# 设置界面的尺寸
self.setFixedSize(self.__size)
def Clear(self):
# 清空画板
self.__board.fill(Qt.white)
self.update()
self.__IsEmpty = True
def ChangePenColor(self, color="black"):
# 改变画笔颜色
self.__penColor = QColor(color)
def ChangePenThickness(self, thickness=20):
# 改变画笔粗细
self.__thickness = thickness
def IsEmpty(self):
# 返回画板是否为空
return self.__IsEmpty
def SetContentFromQPixmap(self, pixmap):
# 设置画板内容为给定的QPixmap
if pixmap.size() != self.__size:
# 如果传入的pixmap尺寸与画板尺寸不一致则调整其尺寸
self.__board = pixmap.scaled(self.__size)
else:
self.__board = pixmap
self.__IsEmpty = False # 画板不再为空
self.update() # 更新显示
def GetContentAsQImage(self):
# 获取画板内容返回QImage
image = self.__board.toImage()
return image
def paintEvent(self, paintEvent):
# 绘图事件
# 绘图时必须使用QPainter的实例此处为__painter
# 绘图在begin()函数与end()函数间进行
# begin(param)的参数要指定绘图设备,即把图画在哪里
# drawPixmap用于绘制QPixmap类型的对象
self.__painter.begin(self)
# 0,0为绘图的左上角起点的坐标__board即要绘制的图
self.__painter.drawPixmap(0, 0, self.__board)
self.__painter.end()
def mousePressEvent(self, mouseEvent):
# 鼠标按下时,获取鼠标的当前位置保存为上一次位置
self.__currentPos = mouseEvent.pos()
self.__lastPos = self.__currentPos
def mouseMoveEvent(self, mouseEvent):
# 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
self.__currentPos = mouseEvent.pos()
self.__painter.begin(self.__board)
if self.EraserMode == False:
# 非橡皮擦模式
self.__painter.setPen(QPen(self.__penColor, self.__thickness)) # 设置画笔颜色,粗细
else:
# 橡皮擦模式下画笔为纯白色,粗细不变
self.__painter.setPen(QPen(Qt.white, self.__thickness))
# 画线
self.__painter.drawLine(self.__lastPos, self.__currentPos)
self.__painter.end()
self.__lastPos = self.__currentPos
self.update() # 更新显示
def mouseReleaseEvent(self, mouseEvent):
self.__IsEmpty = False # 画板不再为空
Loading…
Cancel
Save