1

当我创建一个类时需要使对象使用该类。我制作了一个列表,每次触摸屏幕时都会获得一个新对象。但我不知道如何在 kivy 端显示这些对象。

这是我的python代码:

class Cow(Widget):
   pass


class Farm (Widget):       

   cow_flock = ListProperty([])
     
   def on_touch_down (self, touch):
       self.cow_flock.append(Cow())                

这是我的基维代码:

<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 的新手,我不知道它是如何工作的。换句话说;我不知道我必须为此使用哪种语法。

4

1 回答 1

0

如果您动态创建小部件,则必须使用父级的方法将它们添加到父级(通常是 a Layoutadd_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表示相同的意思。

于 2016-03-29T13:26:17.363 回答