import gradio as gr
from task_functions import add_task, delete_task, get_tasks
# Initialize Gradio app with dark tech-inspired theme
with gr.Blocks() as demo:
gr.Markdown(
"""
📝 Futuristic To-Do List Tracker
"""
)
# Create an empty DataFrame display
task_table = gr.DataFrame(
headers=["Task", "Priority", "Status", "Due Date"],
label="Current Tasks",
elem_id="task-table",
interactive=False
)
# Add Task Section
with gr.Row():
with gr.Column(scale=3):
task_input = gr.Textbox(
label="Task",
placeholder="Enter your task...",
elem_id="input-box"
)
with gr.Column(scale=1):
priority_input = gr.Dropdown(
choices=["Low", "Medium", "High"],
label="Priority",
value="Medium",
elem_id="dropdown"
)
status_input = gr.Dropdown(
choices=["Not Started", "In Progress", "Completed"],
label="Status",
value="Not Started",
elem_id="dropdown"
)
with gr.Column(scale=2):
due_date_input = gr.Textbox(
label="Due Date (YYYY-MM-DD)",
placeholder="YYYY-MM-DD",
elem_id="input-box"
)
with gr.Column(scale=1):
add_button = gr.Button("Add Task", elem_id="button")
# Button click to add task and update DataFrame
def update_task_table(task, priority, status, due_date):
add_task(task, priority, status, due_date)
return get_tasks()
add_button.click(
fn=update_task_table,
inputs=[task_input, priority_input, status_input, due_date_input],
outputs=task_table
)
# Delete Task Section
delete_index = gr.Number(label="Task Index to Delete", value=0, elem_id="input-box")
delete_button = gr.Button("Delete Task", elem_id="button")
# Button click to delete task and update DataFrame
def update_after_delete(index):
delete_task(index)
return get_tasks()
delete_button.click(
fn=update_after_delete,
inputs=delete_index,
outputs=task_table
)
# Load external CSS file
with open("styles.css", "r") as f:
demo.css = f.read()
# Launch the Gradio app
demo.launch()