如何在应用程序启动时填充 ListView?

How to populate a ListView when application launches?

我是 Kivy 的新手,我很难尝试填充视图。我知道我可以在 kv 文件中使用 item_strings 属性,但我想以编程方式进行,因为我计划稍后使用适配器。

我想达到的效果是这样的:

self.name_list_screen.name_list = [str(i + 1) for i in range(10)]

但是当我 运行 我的应用程序时,它崩溃了,因为 self.name_list_screenNone

这是我的 Python 文件:

from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout


class SpikeRoot(BoxLayout):
    name_list_screen = ObjectProperty()

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name_list_screen.name_list = [str(i + 1) for i in range(10)]



class NameListScreen(BoxLayout):
    name_list = ObjectProperty()



class SpikeApp(App):
    pass


if __name__ == '__main__':
    SpikeApp().run()

这是我的 Kivy 文件

SpikeRoot:
    name_list_screen: name_list_scree_widget
    NameListScreen:
        id: name_list_scree_widget

<NameListScreen>:
    name_list: name_list_view
    ListView:
        id: name_list_view

有什么方法可以在小部件加载后调用,以便加载我的列表视图,也就是说,此时此列表视图不再是 None

看来我没有为 SpikeRoot 定义规则,所以将 <SpikeRoot>: 添加到我的 kivy 文件中解决了我的问题。所以,最后我没有对我的 Python 文件做任何更改,但是我将我的 Kivy 文件更改为:

SpikeRoot:

<SpikeRoot>:
    name_list_screen: name_list_scree_widget
    NameListScreen:
        id: name_list_scree_widget

<NameListScreen>:
    name_list: name_list_view
    ListView:
        id: name_list_view