A feature-rich desktop paint application built using Python Tkinter and PIL (Pillow). This app provides a smooth drawing experience with multiple tools, shapes, colors, and undo/redo functionality.
This is not a basic paint clone. It includes:
- Multiple drawing tools (pen, brush, spray, eraser)
- Shape rendering with live preview
- Flood fill (bucket tool) without external dependencies
- Undo/Redo system
- Image saving using PIL
All drawing operations are mirrored to a PIL image backend, ensuring accurate rendering and export.
- Pen (smooth drawing)
- Brush (solid strokes)
- Spray tool (randomized particle effect)
- Eraser
- Line
- Rectangle
- Circle
- Triangle
- Diamond
- Live preview before final placement
- Predefined color palette
- Custom color picker
- Separate pen color and fill color
- Flood fill using PIL (no Ghostscript)
- Threshold-based filling
-
Full action-based undo/redo stack
-
Supports:
- Drawing strokes
- Shapes
- Fill operations
Adjustable sliders for:
- Pen size
- Brush size
- Eraser size
- Spray size
- Spray density
-
Export canvas as:
- PNG
- JPEG
-
Canvas drawing synced with PIL image
-
Ensures:
- Accurate saving
- Reliable fill operations
- Python 3
- Tkinter (GUI)
- PIL / Pillow (image processing)
git clone https://github.com/your-username/paint-app.git
cd paint-apppip install pillowpython main.py| Action | Shortcut |
|---|---|
| Undo | Ctrl + Z |
| Redo | Ctrl + Y |
| Draw | Mouse Drag |
| Fill | Click |
paint-app/
│
├── main.py # Main application file
├── README.md- Event-driven programming (Tkinter bindings)
- Canvas rendering
- PIL image manipulation
- Flood fill algorithm
- State management (undo/redo stacks)
- No layers support
- No zoom/pan system
- No pressure sensitivity (not tablet optimized)
- Performance may drop with very heavy spray usage
If you actually want to level this up:
- Add layers system
- Add zoom + pan
- Add shape resizing/editing after creation
- Add export to SVG
- Add keyboard tool switching
- Optimize spray performance
Made by:
- Parixit
- Megh
- Vivek
This project is a solid step beyond beginner-level Tkinter apps.
But don’t get comfortable — real-world tools need:
- better architecture
- separation of concerns
- performance optimization
Treat this as a foundation, not a finished product.