from PyQt5.QtCore import QDir, QFile, QPoint, QRect, QSize, Qt from PyQt5.QtGui import QImage, QImageWriter, QPainter, QPen, qRgb, QPixmap from PyQt5.QtWidgets import (QAction, QApplication, QColorDialog, QFileDialog, QInputDialog, QMainWindow, QMenu, QMessageBox, QWidget) class Board(QWidget): def __init__(self,parent=None): super(Board,self).__init__(parent) self.setAttribute(Qt.WA_StaticContents) self.penWidth = 50 self.writing = False self.penColor = Qt.black self.image = QImage() self.lastPoint = QPoint() self.setFixedSize(512,512) def saveImage(self,label): import os visibleImage = self.image self.resizeImage(visibleImage,self.size()) if QDir('Image').exists() == False: QDir().mkdir('Image') label = 'Image/'+label if QDir(label).exists() == False: QDir().mkdir(label) cnt = 0 maxf = 0 for file in os.listdir(label): if file.endswith('.bmp'): cnt += 1 tmpN = int(file[:-4:]) maxf = max(maxf,tmpN) visibleImage.save('tmp.bmp') pixmap = QPixmap('tmp.bmp').scaled(8,8) pixmap.save(label+'/'+str(max(cnt,maxf)+1)+'.bmp') QFile.remove('tmp.bmp') def paintEvent(self, event): painter = QPainter(self) dirtyRect = event.rect() painter.drawImage(dirtyRect, self.image, dirtyRect) def clearImage(self): self.image.fill(qRgb(255,255,255)) self.update() def mousePressEvent(self,event): if event.button() == Qt.LeftButton: self.lastPoint = event.pos() self.writing = True def mouseMoveEvent(self,event): if (event.buttons() & Qt.LeftButton) and self.writing: self.drawLineTo(event.pos()) def mouseReleaseEvent(self,event): if event.button() == Qt.LeftButton and self.writing: self.drawLineTo(event.pos()) self.writing = False def resizeEvent(self,event): self.resizeImage(self.image,self.size()) self.update() super(Board,self).resizeEvent(event) def drawLineTo(self, endPoint): painter = QPainter(self.image) painter.setPen(QPen(self.penColor, self.penWidth, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) painter.drawLine(self.lastPoint, endPoint) self.writing = True rad = self.penWidth/2 + 2 self.update(QRect(self.lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad)) self.lastPoint = QPoint(endPoint) def resizeImage(self,image, newSize): if image.size() == newSize: return newImage = QImage(newSize, QImage.Format_RGB32) newImage.fill(qRgb(255,255,255)) painter = QPainter(newImage) painter.drawImage(QPoint(0,0), image) self.image = newImage