import os import time from tkinter import Tk, Frame, Entry, Button, Label, Listbox, StringVar, messagebox from app.widgets.abc import ThreadedTab class TodoListTab(ThreadedTab): def __init__(self, root: Frame | Tk, **kwargs): self.task = StringVar() self.tasks = [] super().__init__(root, **kwargs) def build(self): # Create the main frame for the TODO list interface self.todo_frame = Frame(self) self.todo_frame.pack(fill="both", expand=True) # Entry field for adding a task self.task_entry = Entry(self.todo_frame, textvariable=self.task) self.task_entry.pack(fill="x", padx=5, pady=5) # Button to add a task self.add_task_button = Button(self.todo_frame, text="Add Task", command=self.add_task) self.add_task_button.pack(padx=5, pady=5) # Listbox to display tasks self.task_listbox = Listbox(self.todo_frame) self.task_listbox.pack(fill="both", expand=True, padx=5, pady=5) # Button to delete a selected task self.delete_task_button = Button(self.todo_frame, text="Delete Selected", command=self.delete_task) self.delete_task_button.pack(padx=5, pady=5) def add_task(self): task_text = self.task.get() if task_text: self.tasks.append(task_text) self.update_task_listbox() self.task.set("") # Clear the entry field else: messagebox.showwarning("Warning", "Task cannot be empty!") def delete_task(self): selected_indices = self.task_listbox.curselection() if selected_indices: for index in selected_indices[::-1]: # Reverse to avoid index shifting issues del self.tasks[index] self.update_task_listbox() else: messagebox.showwarning("Warning", "No task selected to delete!") def update_task_listbox(self): self.task_listbox.delete(0, "end") for task in self.tasks: self.task_listbox.insert("end", task) def task(self): # Placeholder for threaded behavior if needed in the future time.sleep(1)