| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import random
- import sys
- from PyQt5 import QtWidgets, QtGui, QtCore
- COLORS = [
- # 17undertoneshttps://lospec.com/palette-list/17undertones
- '#000000', '#141923', '#414168', '#3A7FA7', '#35E3E3', '#8FD970', '#5EBB49',
- '#458352', '#DCD37B', '#FFFEE5', '#FFD035', '#CC9245', '#A15C3E', '#A42F3B',
- '#F45B7A', '#C24998', '#81588D', '#BCB0C2', '#FFFFFF', ]
- SPRAY_PARTICLES = 100
- SPRAY_DIAMMETER = 10
- class Canvas(QtWidgets.QLabel):
- def __init__(self):
- super().__init__()
- pixmap = QtGui.QPixmap(600, 300)
- self.setPixmap(pixmap)
- self.last_x, self.last_y = None, None
- self.pen_color = QtGui.QColor('#000000')
- def set_pen_color(self, c):
- self.pen_color = QtGui.QColor(c)
- def mouseMoveEvent(self, e):
- if self.last_x is None:
- self.last_x = e.x()
- self.last_y = e.y()
- return
- painter = QtGui.QPainter(self.pixmap())
- p = painter.pen()
- p.setWidth(1)
- p.setColor(self.pen_color)
- painter.setPen(p)
- for n in range(SPRAY_PARTICLES):
- xo = random.gauss(0, SPRAY_DIAMMETER)
- yo = random.gauss(0, SPRAY_DIAMMETER)
- painter.drawPoint(e.x() + xo, e.y() + yo)
- self.update()
- self.last_x = e.x()
- self.last_y = e.y()
- def mouseReleaseEvent(self, e):
- self.last_x, self.last_y = None, None
- class QPaletteButton(QtWidgets.QPushButton):
- def __init__(self, color):
- super().__init__()
- self.setFixedSize(QtCore.QSize(24, 24))
- self.color = color
- self.setStyleSheet("background-color: %s;" % color)
- class MainWindow(QtWidgets.QMainWindow):
- def __init__(self):
- super().__init__()
- self.canvas = Canvas()
- w = QtWidgets.QWidget()
- l = QtWidgets.QVBoxLayout()
- w.setLayout(l)
- l.addWidget(self.canvas)
- palette = QtWidgets.QHBoxLayout()
- self.add_palette_buttons(palette)
- l.addLayout(palette)
- self.setCentralWidget(w)
- def add_palette_buttons(self, layout):
- for c in COLORS:
- b = QPaletteButton(c)
- b.pressed.connect(lambda color=c: self.canvas.set_pen_color(color))
- layout.addWidget(b)
- if __name__ == '__main__':
- app = QtWidgets.QApplication(sys.argv)
- window = MainWindow()
- window.show()
- app.exec_()
|