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()
todo.txt
and persist across restarts.python todogui.py
.