1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from PyQt5.QtCore import Qt, QDir, QFile, QPoint, QRect, QSize
from PyQt5.QtWidgets import QWidget, QPushButton, QLineEdit, QLabel, QGridLayout
from PyQt5.QtGui import QImage, QImageWriter, QPainter, QPen, qRgb, QPixmap
class Button(QWidget):
def __init__(self,parent=None, label="Button", on_click=None):
super(Button,self).__init__(parent)
button = QPushButton(label, self)
button.move(220,0)
button.clicked.connect(on_click)
grid = QGridLayout()
grid.addWidget(button,1,0,1,2)
self.setLayout(grid)
class ComboWidget(QWidget):
def __init__(self, parent=None,
text_on_label="Label",
text_on_button="button",
on_click=None, readOnly=False):
super(ComboWidget,self).__init__(parent)
button = QPushButton(text_on_button, self)
lbl = QLabel(self)
lbl.setText(text_on_label)
self.qle = QLineEdit(self)
self.qle.setReadOnly(readOnly)
self.qle.setAlignment(Qt.AlignCenter)
button.clicked.connect(on_click)
grid = QGridLayout()
grid.addWidget(lbl,1,0)
grid.addWidget(self.qle,1,1)
grid.addWidget(button,1,2)
self.setLayout(grid)
def text(self):
return self.qle.text()
def set_text(self, text=""):
self.qle.setText(text)
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