PAINT PROGRAM IN PYTHON ..

 Why use MS Paint when we can build our own paint program ..



The source code :

# pip install PyQt5

# importing libraries
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class Window(QMainWindow):
def __init__(self):
super().__init__()

# setting title
self.setWindowTitle("Paint")

# setting geometry to main window
self.setGeometry(100, 100, 800, 600)

# creating image object
self.image = QImage(self.size(), QImage.Format_RGB32)

# making image color to white
self.image.fill(Qt.white)

# variables
# drawing flag
self.drawing = False
# default brush size
self.brushSize = 2
# default color
self.brushColor = Qt.black

# QPoint object to tract the point
self.lastPoint = QPoint()

# creating menu bar
mainMenu = self.menuBar()

# creating file menu for save and clear action
fileMenu = mainMenu.addMenu("File")

# adding brush size to main menu
b_size = mainMenu.addMenu("Brush Size")

# adding brush color to ain menu
b_color = mainMenu.addMenu("Brush Color")

# creating save action
saveAction = QAction("Save", self)
# adding short cut for save action
saveAction.setShortcut("Ctrl + S")
# adding save to the file menu
fileMenu.addAction(saveAction)
# adding action to the save
saveAction.triggered.connect(self.save)

# creating clear action
clearAction = QAction("Clear", self)
# adding short cut to the clear action
clearAction.setShortcut("Ctrl + C")
# adding clear to the file menu
fileMenu.addAction(clearAction)
# adding action to the clear
clearAction.triggered.connect(self.clear)

# creating options for brush sizes
# creating action for selecting pixel of 4px
pix_4 = QAction("4px", self)
# adding this action to the brush size
b_size.addAction(pix_4)
# adding method to this
pix_4.triggered.connect(self.Pixel_4)

# similarly repeating above steps for different sizes
pix_7 = QAction("7px", self)
b_size.addAction(pix_7)
pix_7.triggered.connect(self.Pixel_7)

pix_9 = QAction("9px", self)
b_size.addAction(pix_9)
pix_9.triggered.connect(self.Pixel_9)

pix_12 = QAction("12px", self)
b_size.addAction(pix_12)
pix_12.triggered.connect(self.Pixel_12)

# creating options for brush color
# creating action for black color
black = QAction("Black", self)
# adding this action to the brush colors
b_color.addAction(black)
# adding methods to the black
black.triggered.connect(self.blackColor)

# similarly repeating above steps for different color
white = QAction("White", self)
b_color.addAction(white)
white.triggered.connect(self.whiteColor)

green = QAction("Green", self)
b_color.addAction(green)
green.triggered.connect(self.greenColor)

yellow = QAction("Yellow", self)
b_color.addAction(yellow)
yellow.triggered.connect(self.yellowColor)

red = QAction("Red", self)
b_color.addAction(red)
red.triggered.connect(self.redColor)

# method for checking mouse cicks
def mousePressEvent(self, event):

# if left mouse button is pressed
if event.button() == Qt.LeftButton:
# make drawing flag true
self.drawing = True
# make last point to the point of cursor
self.lastPoint = event.pos()

# method for tracking mouse activity
def mouseMoveEvent(self, event):

# checking if left button is pressed and drawing flag is true
if (event.buttons() & Qt.LeftButton) & self.drawing:
# creating painter object
painter = QPainter(self.image)

# set the pen of the painter
painter.setPen(QPen(self.brushColor, self.brushSize,
Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

# draw line from the last point of cursor to the current point
# this will draw only one step
painter.drawLine(self.lastPoint, event.pos())

# change the last point
self.lastPoint = event.pos()
# update
self.update()

# method for mouse left button release
def mouseReleaseEvent(self, event):

if event.button() == Qt.LeftButton:
# make drawing flag false
self.drawing = False

# paint event
def paintEvent(self, event):
# create a canvas
canvasPainter = QPainter(self)

# draw rectangle on the canvas
canvasPainter.drawImage(self.rect(), self.image, self.image.rect())

# method for saving canvas
def save(self):
filePath, _ = QFileDialog.getSaveFileName(self, "Save Image", "",
"PNG(*.png);;JPEG(*.jpg *.jpeg);;All Files(*.*) ")

if filePath == "":
return
self.image.save(filePath)

# method for clearing every thing on canvas
def clear(self):
# make the whole canvas white
self.image.fill(Qt.white)
# update
self.update()

# methods for changing pixel sizes
def Pixel_4(self):
self.brushSize = 4

def Pixel_7(self):
self.brushSize = 7

def Pixel_9(self):
self.brushSize = 9

def Pixel_12(self):
self.brushSize = 12

# methods for changing brush color
def blackColor(self):
self.brushColor = Qt.black

def whiteColor(self):
self.brushColor = Qt.white

def greenColor(self):
self.brushColor = Qt.green

def yellowColor(self):
self.brushColor = Qt.yellow

def redColor(self):
self.brushColor = Qt.red


# create pyqt5 app
App = QApplication(sys.argv)

# create the instance of our Window
window = Window()

# showing the wwindow
window.show()

# start the app
sys.exit(App.exec())



And the output ..





Comments

Popular posts from this blog

News application in Python ..

2048 game in Python ..