Spice up your command-line apps with beautiful visuals and interactivity!
🚀 What You’ll Build
A fully functional task manager you can run in your terminal — complete with:
✅ Add/delete tasks
✅ Mark tasks as complete
✅ Colorful ASCII headers
✅ Richly styled tables
✅ Interactive CLI menus
All using Python and a couple of lesser-known but super cool libraries!
🧰 What You’ll Need
Install these first:
pip install pyfiglet rich
💡 Why This Is Fun
CLI apps often feel dry — but throw in some ASCII art and beautiful tables, and suddenly you’ll want to open your terminal. I use these techniques to stay motivated during long automation or data scraping runs — it adds a bit of flair!
🧑💻 The Code: task_manager.py
import pyfiglet
from rich.console import Console
from rich.table import Table
from rich.prompt import Prompt
import sys
console = Console()
tasks = []
def show_banner():
ascii_banner = pyfiglet.figlet_format("Task Manager")
console.print(f"[bold cyan]{ascii_banner}[/bold cyan]")
def show_menu():
console.print("\n[bold yellow]Options:[/bold yellow]")
console.print("[1] View Tasks")
console.print("[2] Add Task")
console.print("[3] Complete Task")
console.print("[4] Delete Task")
console.print("[5] Exit")
def display_tasks():
if not tasks:
console.print("[italic]No tasks available.[/italic]")
return
table = Table(title="📋 Your Tasks", show_lines=True)
table.add_column("ID", style="dim")
table.add_column("Task", style="cyan")
table.add_column("Status", style="green")
for idx, task in enumerate(tasks):
table.add_row(str(idx), task["name"], task["status"])
console.print(table)
def add_task():
name = Prompt.ask("Enter task name")
tasks.append({"name": name, "status": "Pending"})
console.print("[green]Task added![/green]")
def complete_task():
display_tasks()
index = Prompt.ask("Enter task ID to complete")
try:
tasks[int(index)]["status"] = "✅ Completed"
console.print("[green]Task marked as completed![/green]")
except (IndexError, ValueError):
console.print("[red]Invalid task ID![/red]")
def delete_task():
display_tasks()
index = Prompt.ask("Enter task ID to delete")
try:
deleted = tasks.pop(int(index))
console.print(f"[red]Deleted:[/red] {deleted['name']}")
except (IndexError, ValueError):
console.print("[red]Invalid task ID![/red]")
def main():
show_banner()
while True:
show_menu()
choice = Prompt.ask("Choose an option", choices=["1", "2", "3", "4", "5"])
if choice == "1":
display_tasks()
elif choice == "2":
add_task()
elif choice == "3":
complete_task()
elif choice == "4":
delete_task()
elif choice == "5":
console.print("[bold cyan]Goodbye! 👋[/bold cyan]")
sys.exit()
if __name__ == "__main__":
main()
Output
🎉 Wrap-Up
This is a great base for building more advanced terminal tools — think:
Save/load from JSON or a file.
Add due dates, priorities, tags.
Sort/filter/search tasks.
Keyboard shortcuts.
If you enjoyed this, try exploring more rich features like progress bars, panels, and live dashboards!
💬 Over to You!
Have you built any cool terminal tools using Python? Got tips for making CLIs more interactive and fun? Drop a comment!
Top comments (8)
Love how the banner and table styling instantly make this way more inviting - I always add a dash of color to my own CLI scripts too! Have you tried adding keyboard shortcuts for even faster task management?
Thank you so much! I totally agree—color really livens up the CLI experience.
Adding keyboard shortcuts is a fantastic idea! It would definitely speed up task management and make the tool even more user-friendly. I’m planning to explore that next, maybe with libraries like keyboard or readchar for capturing key inputs.
Would love to hear if you have any favorite shortcuts or tips!
This looks so beautiful!
Thank you so much, Madhurima! 😊
I'm really glad you liked it — making the terminal visually fun definitely boosts motivation during long sessions. I’m working on expanding this into a full-featured CLI dashboard next — stay tuned! 💻🌟
Pretty cool, I love spicing up boring terminal stuff - the colors just make me wanna use it more honestly.
Thanks!! I totally agree -- colors really make the terminal more fun and engaging!
Looks amazing
Wow, amazing work