ProyectoFinalPython/app/widgets/TodoListTab.py

60 lines
2.1 KiB
Python

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)