3

ListProperty にパスが格納されている画像ファイルを表示する画面を作成しようとしています。エラー メッセージが、ListProperty が作成される前に Kivy が値にアクセスしようとしていることを示していることは理解していますが、これを修正する方法がわかりません。

これは、プロパティが単一の空の文字列を含む空のリストに初期化され、ビルド メソッドが呼び出される main.py スクリプトのスニペットです。

presentation = Builder.load_file("main.kv")

class MainApp(App):
    image_list = ListProperty([''])

    def build(self):
        return presentation

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

プロパティが使用されている main.kv のセクションは次のとおりです。

<Screen1>:
    name: 'screen1'
    BoxLayout:
        orientation: 'horizontal'
        Picture:
            source: app.image_string.pop()

スローされる例外は次のとおりです。

 ...
 BuilderException: Parser: File "main.kv", line 71:
 ...
      69:        orientation: 'horizontal'
      70:        Picture:
 >>   71:            source: app.image_string.pop()
      72:

これを修正する方法についてのガイダンスは大歓迎です。ありがとう!

EDIT Reader FINs は、image_list の代わりにimage_string を呼び出していたことを指摘しましたが、修正を行った後でも同じエラーが発生します。

BoxLayout:
    orientation: 'horizontal'
    Picture:
        source: app.image_list.pop()
 BuilderException: Parser: File "main.kv", line 71:

と ...

 BuilderException: Parser: File "main.kv", line 71:
 ...
      69:        orientation: 'horizontal'
      70:        Picture:
 >>   71:            source: app.image_list.pop()
4

1 に答える 1

4

この例では、build メソッド内に kivy デザイン言語をロードすると機能します。

from kivy.app import App 
from kivy.properties import ListProperty 
from kivy.base import Builder

class MainApp(App):
    image_list = ListProperty([''])

    def build(self):
        presentation = Builder.load_string(""" 
Screen:
    name: 'screen1'
    BoxLayout:
        Image:
            source: app.image_list.pop()
    """)

        return presentation

if __name__ == '__main__':
    MainApp().run()
于 2016-03-26T21:22:17.857 に答える