Kivy:如何在 Kivy 中显示对象列表?

Kivy: how to display a list of Objects in Kivy?

当我创建一个class时需要让对象使用class。 我做了一个列表,每次我触摸屏幕时都会得到一个新的对象。 但是我不知道如何在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 的新手,我不知道它是如何工作的。 换句话说;我不知道我必须为此使用哪种语法。

如果您动态创建小部件,则必须使用父级的 add_widget 方法将它们添加到父级(通常是 Layout)。

让我们假设您的 Farm class 是某种 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 在您的代码片段中表示相同的意思。