2017-01-31 4 views
1

Я новичок в Kivy, и мне нелегко пытаться заполнить представление. Я знаю, что могу использовать атрибут item_strings в файле kv, но я хочу сделать это программно, так как я планировал использовать адаптер позже.Как заполнить ListView при запуске приложения?

То, что я хочу достичь, это что-то вроде этого:

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

но когда я запускаю мое приложение, он выходит из строя, так как self.name_list_screen является None.

Это мой файл 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 

Есть ли способ, что я могу назвать, когда виджеты были загружены, так что я могу загрузить этот мой list list, т. е. на данный момент это вид списка больше не None.

ответ

0

Похоже, что я не определял правило для 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 

 Смежные вопросы

  • Нет связанных вопросов^_^