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
(为此,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
仅在列表更改时触发(即添加或删除项目),而不是在列表项更改时触发。
顺便说一句,我还假设 House
和 Farm
在您的代码片段中表示相同的意思。
当我创建一个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
(为此,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
仅在列表更改时触发(即添加或删除项目),而不是在列表项更改时触发。
顺便说一句,我还假设 House
和 Farm
在您的代码片段中表示相同的意思。