0

私は Kivy を使用して、タブ付きパネルの異なるタブに異なる画像をロードする単純なアプリを構築しています。異なるパネル項目はすべて同じように動作するはずですが、画像が異なるため、ウィジェット クラスを作成しました。多くの例のように、kv 言語を使用してアプリを初期化しようとしています。
現在、kv 言語部分からウィジェット インスタンスにリスト内のファイル名を渡す方法が見つからないため、機能させることができません。他のプロパティを操作することはできますが、ListProperty には困惑しています。

ここに私のコードからのスニペットがあります:

Builder.load_string("""
<MyMainClass>:
    #stuff
    TabbedPanelItem:
        MyClassLayout:
            filenames: ['pic1.jpg', 'pic2.jpg', 'pic3.jpg', 'pic4.jpg']
    #other TabbedPanelItems like the one above, 
    #with different strings in the list
""")

def MyMainClass(TabbedPanel):
    pass

def MyClassLayout(FloatLayout):
    filenames = ListProperty([])
    #rest of my class

私がすでに試したこと:

  • kv 言語部分でリストを割り当てる際に、別の括弧を使用します。() と {} を試しましたが、括弧はありませんでした。
  • ListProperty を別の方法で初期化します。既にいくつかの文字列を入れてみました。
  • 別のリストを送信: 文字列の代わりに数字を送信してみました。

その結果、ウィジェットのファイル名リストは常にデフォルト値になります。それは、上記のスニペットの [] か、クラスの宣言で設定したものです。

誰かが私が間違っていることを指摘してくれますか?

ありがとう。

4

1 に答える 1

1

私はこれを修正することができました。

問題は、コンストラクターでリストを読み取ろうとしていたことです。ただし、ウィジェット オブジェクトがコンストラクターを終了した後、kv lang 部分から値を受け取ります。

修正として、次のようにリストを読み取るメソッドを呼び出します。

Clock.schedule_once(self.late_init, 0.02)

人々がこれを見つけて助けてくれることを願っています。

于 2015-09-27T03:38:40.550 に答える