2016-03-29 51 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

如果您動態創建窗口小部件,則必須將其與父窗口的add_widget方法一起添加到父窗口(通常爲Layout)。

我們假設你的Farm類是某種Layout(對於此,FloatLayoutRelativeLayout可能是最好的)。 您可以添加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