๐งช Features Included
- ๐️ Freehand painting with adjustable color
- ⬛ Rectangle drawing
- ⚪ Circle drawing
- ๐ฆ Simulated 3D box with shading
- ๐จ Color picker
- ๐งผ Canvas clearing
๐จ Tahsin's Open Source Python Paint Software with Tkinter
import tkinter as tk
from tkinter import colorchooser
class PaintApp:
def __init__(self, root):
self.root = root
self.root.title("Tahsin's Python Paint Software")
self.current_tool = "paint"
self.current_color = "black"
self.start_x = None
self.start_y = None
# Canvas setup
self.canvas = tk.Canvas(root, bg="white", width=800, height=600)
self.canvas.pack(fill=tk.BOTH, expand=True)
# Tool buttons
tool_frame = tk.Frame(root)
tool_frame.pack()
tk.Button(tool_frame, text="Paint", command=lambda: self.select_tool("paint")).pack(side=tk.LEFT)
tk.Button(tool_frame, text="Rectangle", command=lambda: self.select_tool("rectangle")).pack(side=tk.LEFT)
tk.Button(tool_frame, text="Circle", command=lambda: self.select_tool("circle")).pack(side=tk.LEFT)
tk.Button(tool_frame, text="3D Box", command=lambda: self.select_tool("3d")).pack(side=tk.LEFT)
tk.Button(tool_frame, text="Choose Color", command=self.choose_color).pack(side=tk.LEFT)
tk.Button(tool_frame, text="Clear", command=self.clear_canvas).pack(side=tk.LEFT)
# Bind mouse events
self.canvas.bind("<ButtonPress-1>", self.on_press)
self.canvas.bind("<B1-Motion>", self.on_drag)
self.canvas.bind("<ButtonRelease-1>", self.on_release)
def select_tool(self, tool):
self.current_tool = tool
def choose_color(self):
color = colorchooser.askcolor()[1]
if color:
self.current_color = color
def clear_canvas(self):
self.canvas.delete("all")
def on_press(self, event):
self.start_x = event.x
self.start_y = event.y
if self.current_tool == "paint":
self.canvas.create_oval(event.x, event.y, event.x+1, event.y+1, fill=self.current_color, outline=self.current_color)
def on_drag(self, event):
if self.current_tool == "paint":
self.canvas.create_oval(event.x, event.y, event.x+5, event.y+5, fill=self.current_color, outline=self.current_color)
def on_release(self, event):
if self.current_tool == "rectangle":
self.canvas.create_rectangle(self.start_x, self.start_y, event.x, event.y, outline=self.current_color)
elif self.current_tool == "circle":
self.canvas.create_oval(self.start_x, self.start_y, event.x, event.y, outline=self.current_color)
elif self.current_tool == "3d":
# Simulate a 3D box with shaded lines
x1, y1, x2, y2 = self.start_x, self.start_y, event.x, event.y
offset = 20
# Front face
self.canvas.create_rectangle(x1, y1, x2, y2, outline=self.current_color)
# Back face
self.canvas.create_rectangle(x1+offset, y1-offset, x2+offset, y2-offset, outline=self.current_color)
# Connect corners
self.canvas.create_line(x1, y1, x1+offset, y1-offset, fill=self.current_color)
self.canvas.create_line(x2, y1, x2+offset, y1-offset, fill=self.current_color)
self.canvas.create_line(x1, y2, x1+offset, y2-offset, fill=self.current_color)
self.canvas.create_line(x2, y2, x2+offset, y2-offset, fill=self.current_color)
# Run the app
if __name__ == "__main__":
root = tk.Tk()
app = PaintApp(root)
root.mainloop()
No comments:
Post a Comment