paint_app.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import random
  2. import sys
  3. from PyQt5 import QtWidgets, QtGui, QtCore
  4. COLORS = [
  5. # 17undertoneshttps://lospec.com/palette-list/17undertones
  6. '#000000', '#141923', '#414168', '#3A7FA7', '#35E3E3', '#8FD970', '#5EBB49',
  7. '#458352', '#DCD37B', '#FFFEE5', '#FFD035', '#CC9245', '#A15C3E', '#A42F3B',
  8. '#F45B7A', '#C24998', '#81588D', '#BCB0C2', '#FFFFFF', ]
  9. SPRAY_PARTICLES = 100
  10. SPRAY_DIAMMETER = 10
  11. class Canvas(QtWidgets.QLabel):
  12. def __init__(self):
  13. super().__init__()
  14. pixmap = QtGui.QPixmap(600, 300)
  15. self.setPixmap(pixmap)
  16. self.last_x, self.last_y = None, None
  17. self.pen_color = QtGui.QColor('#000000')
  18. def set_pen_color(self, c):
  19. self.pen_color = QtGui.QColor(c)
  20. def mouseMoveEvent(self, e):
  21. if self.last_x is None:
  22. self.last_x = e.x()
  23. self.last_y = e.y()
  24. return
  25. painter = QtGui.QPainter(self.pixmap())
  26. p = painter.pen()
  27. p.setWidth(1)
  28. p.setColor(self.pen_color)
  29. painter.setPen(p)
  30. for n in range(SPRAY_PARTICLES):
  31. xo = random.gauss(0, SPRAY_DIAMMETER)
  32. yo = random.gauss(0, SPRAY_DIAMMETER)
  33. painter.drawPoint(e.x() + xo, e.y() + yo)
  34. self.update()
  35. self.last_x = e.x()
  36. self.last_y = e.y()
  37. def mouseReleaseEvent(self, e):
  38. self.last_x, self.last_y = None, None
  39. class QPaletteButton(QtWidgets.QPushButton):
  40. def __init__(self, color):
  41. super().__init__()
  42. self.setFixedSize(QtCore.QSize(24, 24))
  43. self.color = color
  44. self.setStyleSheet("background-color: %s;" % color)
  45. class MainWindow(QtWidgets.QMainWindow):
  46. def __init__(self):
  47. super().__init__()
  48. self.canvas = Canvas()
  49. w = QtWidgets.QWidget()
  50. l = QtWidgets.QVBoxLayout()
  51. w.setLayout(l)
  52. l.addWidget(self.canvas)
  53. palette = QtWidgets.QHBoxLayout()
  54. self.add_palette_buttons(palette)
  55. l.addLayout(palette)
  56. self.setCentralWidget(w)
  57. def add_palette_buttons(self, layout):
  58. for c in COLORS:
  59. b = QPaletteButton(c)
  60. b.pressed.connect(lambda color=c: self.canvas.set_pen_color(color))
  61. layout.addWidget(b)
  62. if __name__ == '__main__':
  63. app = QtWidgets.QApplication(sys.argv)
  64. window = MainWindow()
  65. window.show()
  66. app.exec_()