2014-09-22 2 views
0

나는 "Kivy에서 앱 만들기"라는 책을 집필 한 Dusty Phillips가 제안한 간단한 todo-list 응용 프로그램을 작성하여 kivy를 배우려고합니다.Python Kivy ListView : 선택한 ListItemButton을 삭제하는 방법?

이 지금까지 코드 :

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() 

는 그리고 이것은 KV 파일입니다 : I리스트 뷰 API를 알고 enter image description here

:

#: import main todo 
#: import ListAdapter kivy.adapters.listadapter.ListAdapter 
#: import ListItemButton kivy.uix.listview.ListItemButton 

TodoRoot: 

<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) 

이는 것처럼 보이는 것입니다 아직 다소 실험적이며 어댑터/변환기, Google & SO 검색을 사용하여 예제에 대해 불평하고 있습니다. 어느 쪽도 도움이되지 않습니다. Del-Button을 작동시키고 선택된 ListItemButton을 제거하기 위해 어떤 코드가 필요합니까?

답변

0

많은 ListView API 문서 (예 : &)를 읽은 후 드디어 나 자신을 발견했습니다. 우리가 필요로하는 것은 listadapter-Class의 selection-Property입니다. 그러면 adapter.data-ListProperty의 상속 된 remove 메소드를 간단하게 호출 할 수 있습니다.

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() 
:

그래서 사람이이 코드 interesested