A desktop task-management app built with Python and CustomTkinter, featuring due-date tracking, priority levels, live search, statistics charts, and CSV/PDF export.
| Main Window | Dark Theme |
|---|---|
![]() |
![]() |
| Statistics | Notifications |
|---|---|
![]() |
![]() |
| CSV Export | PDF Export |
|---|---|
![]() |
![]() |
- ✅ Add, edit, delete, and complete tasks with title, category, priority, and due date
- 🔍 Live search — filters tasks as you type
- 🗂️ Filter by status — All / Active / Completed
↕️ Sort tasks — by Due Date, Priority, Alphabetical, or Recently Modified- 🏷️ Categories — Personal, Work, Study, Shopping, Other
- 🚦 Priority levels — High, Medium, Low (color-coded)
- ⏰ Due-date awareness — tasks are automatically flagged as
🟡 Due Todayor🔴 OVERDUE - 🔔 Background notifications — checks for due/overdue tasks every 5 minutes
- 📊 Statistics dashboard — completed vs. remaining and priority breakdown, visualized with charts
- 📄 Export tasks — to CSV or a formatted PDF report
- 🎨 Theming — light / dark / system appearance modes
- 💾 Local persistence — tasks and settings saved automatically as JSON in your user app-data folder (no setup, no external database)
| Purpose | Library |
|---|---|
| GUI | CustomTkinter |
| Charts / Statistics | Matplotlib, NumPy |
| PDF export | ReportLab |
| Data storage | JSON (built-in) |
| Packaging | PyInstaller |
The app is organized into focused modules rather than one large script:
ToDo_App/
├── main.py # Entry point
├── assets/
│ └── todo.ico
└── src/
├── gui.py # Main application window & widget wiring
├── task_manager.py # Core task CRUD logic (GUI never touches data directly)
├── storage.py # Load/save tasks & settings as JSON
├── statistics.py # Statistics window (matplotlib charts)
├── export.py # CSV / PDF export
├── notifications.py # Due/overdue task checks
├── widgets.py # Reusable UI components (task cards)
├── constant.py # Shared constants (categories, priorities, colors)
└── utils.py # Helper functions (e.g. due-date status)
This separation keeps the GUI layer independent from the data layer — TaskManager handles all task operations, and gui.py only calls into it, which makes the code easier to extend or reuse (e.g. swapping the storage backend later).
- Download
ToDo_App.exefrom the Releases section. - Run it — no installation or Python required.
git clone https://github.com/nitin-bit09/ToDoApp.git
cd ToDoApp
pip install -r requirements.txt
python main.pyrequirements.txt (example — adjust to your actual versions)
customtkinter
matplotlib
numpy
reportlab
- Recurring tasks / reminders
- Subtasks or checklists within a task
- Cloud sync or multi-device support
- Unit tests
- Cross-platform build (macOS/Linux)
This project is licensed under the MIT License.
nitin-chem — GitHub
This was my first end-to-end software project, built with Python and guided by ChatGPT.





