【问题标题】:Python Kivy ListView: How to delete selected ListItemButton?Python Kivy ListView:如何删除选定的 ListItemButton?
【发布时间】:2014-09-22 19:34:05
【问题描述】:

我正在尝试通过构建一个简单的待办事项列表应用程序来学习 kivy,就像“在 Kivy 中创建应用程序”一书的作者 Dusty Phillips 所建议的那样。

这是目前为止的代码:

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文件:

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

这就是它的样子:

我知道 ListView API 仍处于试验阶段,我抱怨有关使用适配器/转换器的示例,谷歌和 SO 搜索也没有帮助。那么需要什么代码才能使 Del-Button 工作并删除选定的 ListItemButton?

【问题讨论】:

    标签: python listview kivy


    【解决方案1】:

    在大量阅读 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多