2016-03-29 3 views
1

私は、必要なクラスを作成して、そのクラスを使用するオブジェクトを作成します。 私は画面に触れるたびに新しいオブジェクトを取得するリストを作成しました。 しかし、これらのオブジェクトをkivy側に表示する方法はわかりません。ここでKivy:Kivyのオブジェクトのリストを表示するには?

は私のpythonのコードです:ここで

class Cow(Widget): 
    pass 


class Farm (Widget):  

    cow_flock = ListProperty([]) 

    def on_touch_down (self, touch): 
     self.cow_flock.append(Cow())     

は私kivyコードは次のとおりです。

<Cow>:  
    size: 70, 70 
    canvas: 
     Rectangle: 
      size: self.size 
      pos: self.pos 

<House>: 
    self.cow_flock #this should display the cows 

私はエラー:

kivy.lang.ParserException: Parser: File "<inline>", line 12: 
    ... 
     10: 
     11:<House>: 
    >> 12: self.doorlist 
     13: 
     14: 
    ... 
    Invalid property name 

私は「Kivyと私ドンで新しいですそれがどのように機能するか正確に知る 換言すると、私は構文が私はこれに使用する必要があります考えている。 私はあらゆる助けを感謝します!ありがとうございました!

答えて

0

ウィジェットを動的に作成する場合、ウィジェットを親に追加する必要があります(通常Layout)。親のadd_widgetメソッドを使用します。

はのは、あなたのFarmクラスがLayoutのいくつかの種類(このため、FloatLayoutまたはRelativeLayoutが最善かもしれない)であると仮定しよう。 あなたはcow_flockプロパティのイベントハンドラの監視の変更を追加することができます。

class Farm(RelativeLayout): 
    cow_flock = ListProperty() 
    def on_cow_flock(self, cow_flock): 
     self.clear_widgets() 
     for cow in cow_flock: 
      self.add_widget(cow) 

これはFarmインスタンスのすべての子ウィジェットをクリアし、各牛、バック一つ一つを、追加します。 on_cow_flockは、リストが変更されたとき(アイテムが追加または削除されたとき)にのみ起動され、リストアイテムが変更されたときには起動されないことに注意してください。

ところで、HouseFarmは、コードスニペットで同じことを意味します。

+0

まさに私が見たいもの。あなたに大歓迎ありがとう!あなたは私をたくさん助けました – strammermax

関連する問題