Python Kivy ListView: ¿Cómo eliminar ListItemButton seleccionado?

Estoy tratando de aprender Kivy mediante la creación de una aplicación de lista de tareas simple como lo sugirió Dusty Phillips, autor del libro “Creando aplicaciones en Kivy”.

Este es el código hasta ahora:

from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.properties import ObjectProperty from kivy.uix.listview import ListItemButton class TaskButton(ListItemButton): pass class TodoRoot(BoxLayout): task_input = ObjectProperty() task_list = ObjectProperty() def add_task(self): self.task_list.adapter.data.extend([self.task_input.text]) self.task_list._trigger_reset_populate() def del_task(self): pass class TodoApp(App): def build(self): return TodoRoot() if __name__ == '__main__': TodoApp().run() 

Y este es el archivo kv:

 #: import main todo #: import ListAdapter kivy.adapters.listadapter.ListAdapter #: import ListItemButton kivy.uix.listview.ListItemButton TodoRoot: : orientation: "vertical" task_input: task_input_view task_list: tasks_list_view BoxLayout: size_hint_y: None height: "40dp" TextInput: id: task_input_view size_hint_x: 70 Button: text: "Add" size_hint_x: 15 on_press: root.add_task() Button: text: "Del" size_hint_x: 15 on_press: root.del_task() ListView: id: tasks_list_view adapter: ListAdapter(data=[], cls=main.TaskButton) 

Esto es lo que parece: introduzca la descripción de la imagen aquí

Sé que la API de ListView todavía es un tanto experimental y me estoy quejando de los ejemplos sobre el uso de adaptadores / convertidores. Entonces, ¿qué código se necesita para hacer que el botón de eliminación funcione y elimine un ListItemButton seleccionado?

    Después de leer muchos documentos y ejemplos de ListView API, finalmente me enteré. Lo que necesitamos es la propiedad de selección de listadapter-Class, entonces simplemente podemos llamar al método de eliminación heredado de adapter.data-ListProperty.

    Así que para cualquier persona interesada este es el código:

     def del_task(self, *args): if self.task_list.adapter.selection: selection = self.task_list.adapter.selection[0].text self.task_list.adapter.data.remove(selection) self.task_list._trigger_reset_populate()