Modern MS Paint in Python using Tkinter - Advanced Drawing App

Demo :


Click Video πŸ‘‡πŸ‘‡πŸ‘‡
















Description:

Python Tkinter se apna khud ka MS Paint banao! πŸ–Œ Yeh advanced project zaroor try karo! πŸ”₯

Content:

πŸ”₯ Python Tkinter se MS Paint banane ka best project!
Aaj hum ek Modern MS Paint banayenge Python Tkinter ka use karke. Yeh app brush, eraser, shapes, color picker, save, open aur clear canvas jaise features ke sath aata hai. Aap isse customize bhi kar sakte ho! 🎨

πŸš€ Features:

✔️ Brush & Eraser Tool
✔️ Rectangle, Circle, & Line Drawing
✔️ Color Picker
✔️ Save & Open Image Support
✔️ Clear Canvas Function


Code :


import tkinter as tk

from tkinter import filedialog, colorchooser, messagebox

from PIL import Image, ImageDraw, ImageTk

import os


class ModernMSPaint:

    def __init__(self, root):

        self.root = root

        self.root.title("MS Paint Advanced")

        self.root.geometry("1200x700")

        

        self.color = "black"

        self.brush_size = 5

        self.eraser_on = False

        self.tool = "brush"

        self.start_x = None

        self.start_y = None

        

        # Canvas

        self.canvas = tk.Canvas(root, bg="white", width=1000, height=600)

        self.canvas.pack(fill=tk.BOTH, expand=True)

        self.canvas.bind("<ButtonPress-1>", self.start_draw)

        self.canvas.bind("<B1-Motion>", self.paint)

        self.canvas.bind("<ButtonRelease-1>", self.end_draw)

        

        # Image for Drawing

        self.image = Image.new("RGB", (1000, 600), "white")

        self.draw = ImageDraw.Draw(self.image)

        

        # Toolbar

        self.toolbar = tk.Frame(root, bg="#222")

        self.toolbar.pack(fill=tk.X)

        

        # Buttons

        tools = [("Brush", "brush"), ("Eraser", "eraser"), ("Rectangle", "rectangle"), 

                 ("Circle", "circle"), ("Line", "line"), ("Clear", "clear"), ("Save", "save"), ("Open", "open")]

        

        for text, mode in tools:

            btn = tk.Button(self.toolbar, text=text, command=lambda m=mode: self.select_tool(m), bg="#444", fg="white")

            btn.pack(side=tk.LEFT, padx=5, pady=5)

        

        self.color_btn = tk.Button(self.toolbar, text="Color", command=self.choose_color, bg="#444", fg="white")

        self.color_btn.pack(side=tk.LEFT, padx=5, pady=5)

        

        self.brush_slider = tk.Scale(self.toolbar, from_=1, to=20, orient=tk.HORIZONTAL, label="Size", bg="#444", fg="white")

        self.brush_slider.pack(side=tk.LEFT, padx=5, pady=5)

    

    def select_tool(self, tool):

        self.tool = tool

        if tool == "clear":

            self.clear_canvas()

        elif tool == "save":

            self.save_image()

        elif tool == "open":

            self.open_image()

    

    def choose_color(self):

        self.color = colorchooser.askcolor()[1]

        self.eraser_on = False

    

    def start_draw(self, event):

        self.start_x, self.start_y = event.x, event.y

    

    def paint(self, event):

        if self.tool == "brush":

            x1, y1 = event.x - self.brush_size, event.y - self.brush_size

            x2, y2 = event.x + self.brush_size, event.y + self.brush_size

            color = "white" if self.eraser_on else self.color

            self.canvas.create_oval(x1, y1, x2, y2, fill=color, outline=color)

            self.draw.ellipse([x1, y1, x2, y2], fill=color, outline=color)

    

    def end_draw(self, event):

        if self.tool == "rectangle":

            self.canvas.create_rectangle(self.start_x, self.start_y, event.x, event.y, outline=self.color, width=self.brush_size)

            self.draw.rectangle([self.start_x, self.start_y, event.x, event.y], outline=self.color, width=self.brush_size)

        elif self.tool == "circle":

            self.canvas.create_oval(self.start_x, self.start_y, event.x, event.y, outline=self.color, width=self.brush_size)

            self.draw.ellipse([self.start_x, self.start_y, event.x, event.y], outline=self.color, width=self.brush_size)

        elif self.tool == "line":

            self.canvas.create_line(self.start_x, self.start_y, event.x, event.y, fill=self.color, width=self.brush_size)

            self.draw.line([self.start_x, self.start_y, event.x, event.y], fill=self.color, width=self.brush_size)

    

    def clear_canvas(self):

        self.canvas.delete("all")

        self.image = Image.new("RGB", (1000, 600), "white")

        self.draw = ImageDraw.Draw(self.image)

    

    def save_image(self):

        file_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png"), ("JPEG files", "*.jpg"), ("PDF files", "*.pdf")])

        if file_path:

            if file_path.endswith(".pdf"):

                self.image.save(file_path, "PDF")

            else:

                self.image.save(file_path)

            messagebox.showinfo("Saved", "Image saved successfully!")

    

    def open_image(self):

        file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg;*.bmp;*.gif")])

        if file_path:

            img = Image.open(file_path)

            img = img.resize((1000, 600))

            self.image = img

            self.draw = ImageDraw.Draw(self.image)

            self.tk_image = ImageTk.PhotoImage(img)

            self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tk_image)


if __name__ == "__main__":

    root = tk.Tk()

    app = ModernMSPaint(root)

    root.mainloop()

Comments

Popular posts from this blog

πŸš€ Simple Login & Registration System in Python Tkinter πŸ“±

πŸš€ Create a Python Screen Recorder with Audio (Complete Code)

Python IP Tracker App with GUI | Track IP Location Real-Time! (Working Project)