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
Post a Comment