To-Do List App (GUI Version)

andreasPython Code2 months ago73 Views

To-Do List App (GUI Version)

import tkinter as tk
from tkinter import messagebox, simpledialog
import os

TODO_FILE = "todo.txt"

def load_tasks():
    if not os.path.exists(TODO_FILE):
        return []
    with open(TODO_FILE, "r") as f:
        return [line.strip() for line in f.readlines()]

def save_tasks(tasks):
    with open(TODO_FILE, "w") as f:
        f.write("\n".join(tasks))

class TodoApp:
    def __init__(self, root):
        self.root = root
        self.root.title(" To-Do List")

        self.tasks = load_tasks()

        self.task_listbox = tk.Listbox(root, width=40, height=10)
        self.task_listbox.pack(padx=10, pady=10)

        self.add_button = tk.Button(root, text="Add Task", command=self.add_task)
        self.add_button.pack(pady=5)

        self.remove_button = tk.Button(root, text="Remove Selected", command=self.remove_task)
        self.remove_button.pack(pady=5)

        self.refresh_listbox()

    def refresh_listbox(self):
        self.task_listbox.delete(0, tk.END)
        for task in self.tasks:
            self.task_listbox.insert(tk.END, task)

    def add_task(self):
        new_task = simpledialog.askstring("Add Task", "Enter your new task:")
        if new_task:
            self.tasks.append(new_task.strip())
            save_tasks(self.tasks)
            self.refresh_listbox()

    def remove_task(self):
        selected = self.task_listbox.curselection()
        if not selected:
            messagebox.showwarning("No selection", "Please select a task to remove.")
            return
        task = self.task_listbox.get(selected[0])
        self.tasks.remove(task)
        save_tasks(self.tasks)
        self.refresh_listbox()

if __name__ == "__main__":
    root = tk.Tk()
    app = TodoApp(root)
    root.mainloop()

Features:

  • Add and remove tasks via buttons.
  • Tasks are saved to todo.txt and persist across restarts.
  • Lightweight and easy to run — just python todogui.py.

0 Votes: 0 Upvotes, 0 Downvotes (0 Points)

Leave a reply

Previous Post

Next Post

Loading Next Post...
Loading

Signing-in 3 seconds...