【问题标题】:How to bind on_selection_change in a .kv file (Kivy, listadapter)如何在 .kv 文件中绑定 on_selection_change(Kivy、listadapter)
【发布时间】:2018-02-21 03:43:10
【问题描述】:

我无法找到将 ListView 的 on_selection_change 函数绑定到 Kivy 中的列表适配器的方法。这是因为当您选择某个列表项时,会调用一个函数。文档说可以通过这种方式在 .py 文件中完成:

list_adapter.bind(on_selection_change=callback_function)

但是,我的整个程序分为 .py 和 .kv 文件。我的程序不使用纯 python 方式,或 Builder.load_string(""" """) 方式为 kivy 编码。如果您使用 .kv 语言,我想知道是否有办法将 on_selection_change 绑定到列表适配器。我的 .kv 文件示例:

BoxLayout:
        orientation: "vertical"
        size_hint: 2, 1
        ListView:
            id: demo_list_view
            size_hint: 1, 1
            adapter:
                ListAdapter(data=sorted([]),
                selection_mode="single",
                allow_empty_selection=True,
                cls=ListItemButton)

【问题讨论】:

    标签: python kivy listadapter


    【解决方案1】:

    您可以在 .kv 文件中绑定一个动作。 看看这里:https://kivy.org/docs/guide/lang.html(“使用 Kivy 语言设计”部分)。 例如:

    Button:
            text: 'Button'
            on_press: root.do_action()
    

    do_action() 定义在按钮根类的 .py 文件中:

    def do_action(self):
        pass
    

    或者您可以在小部件类(.py 文件)中定义 action 并使用 self.action() (.kv)。

    此外,您可以在 .kv 文件中使用一些 python 代码,只要它不需要新的构思级别。

    例子:

    on_press: root.do_action()
              for i in range(10): pass
    

    但你不能:

    on_press: root.do_action()
              for i in range(10):
                  pass
    

    不是一个完整的答案,但我不能发表评论,所以我把它留在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多