import gradio as gr tasks = [] def add_task(task): """Add a new task.""" if task.strip(): tasks.append({"task": task.strip(), "done": False}) choices = [(f"{'✅' if t['done'] else '⬜'} {t['task']}", i) for i, t in enumerate(tasks)] return "", gr.CheckboxGroup(choices=choices, value=[]) def update_completed(selected): """Update completed tasks.""" for i, task in enumerate(tasks): task["done"] = i in selected choices = [(f"{'✅' if t['done'] else '⬜'} {t['task']}", i) for i, t in enumerate(tasks)] values = [i for i, t in enumerate(tasks) if t["done"]] return gr.CheckboxGroup(choices=choices, value=values) def refresh(): """Remove completed tasks.""" global tasks tasks = [t for t in tasks if not t["done"]] choices = [(f"{'✅' if t['done'] else '⬜'} {t['task']}", i) for i, t in enumerate(tasks)] values = [i for i, t in enumerate(tasks) if t["done"]] return gr.CheckboxGroup(choices=choices, value=values) def create_tasks(): with gr.Column() as tasks: gr.Markdown("# 📝 Interactive To-Do List") with gr.Row(): task_input = gr.Textbox( placeholder="Enter a task...", label="New Task" ) add_btn = gr.Button("➕ Add Task") todo_list = gr.CheckboxGroup( choices=[], value=[], label="Your Tasks" ) refresh_btn = gr.Button("🔄 Refresh (Remove Completed)") add_btn.click( fn=add_task, inputs=task_input, outputs=[task_input, todo_list] ) todo_list.change( fn=update_completed, inputs=todo_list, outputs=todo_list ) refresh_btn.click( fn=refresh, inputs=None, outputs=todo_list ) return tasks