2017-01-31 14 views
1

私はKivyを初心者にしていますが、私は視界に入るのに苦労しています。 kvファイルでitem_strings属性を使用できることはわかっていますが、後でアダプターを使用する予定があるので、プログラムで行う必要があります。アプリケーションの起動時にListViewに値を設定するにはどうすればよいですか?

私は何を達成したいことは、このようなものです:

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ではなくなりました。

答えて

0

私は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 
関連する問題