60 lines
2.1 KiB
Python
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)
|