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

时间:2016-03-29 12:03:38

标签: python kivy kivy-language

当我创建一个需要使对象使用该类的类时。 每当我触摸屏幕时,我都会列出一个新的对象列表。 但我不知道如何在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的新人,我不确切知道它是如何运作的。 换句话说;我不知道我必须使用哪种语法。 我感谢每一个帮助!!谢谢!

1 个答案:

答案 0 :(得分:0)

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

我们假设您的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在您的代码段中表示相同的内容。