我想做一个小游戏,当你点击它的时候,它就消失了。A使用kivy语言将敌人添加到小部件中,它运行得很好,但是我想添加多个敌人,我不想添加越来越多的敌人,所以我想使用add_widget命令将敌人的witget发送到place小部件上,但是我得到了错误:
TypeError: unbound method add_widget() must be called with place instance as first argument (got WidgetMetaclass instance instead)以下是源代码:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import NumericProperty
from kivy.clock import Clock
from kivy.animation import Animation
class place(Widget):
pass
class Enemy(Widget):
velocity = NumericProperty(1)
def __init__(self, **kwargs):
super(Enemy, self).__init__(**kwargs)
Clock.schedule_interval(self.Update, 1/60.)
def Update(self, *args):
self.x -= self.velocity
if self.x < 1:
self.velocity = 0
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
print 'es geht'
self.velocity = 0
self.parent.remove_widget(self)
ROOT = Builder.load_string('''
FloatLayout:
Button:
text: 'Go Back'
size_hint: 0.3, 0.1
pos_hint: {"x": 0, 'y':0}
place:
<place>:
Enemy:
pos: 400, 100
<Enemy>:
Image:
pos: root.pos
id: myimage
source: 'enemy.png'
''')
class Caption(App):
def build(self):
place.add_widget(Enemy)
return ROOT
if __name__ == '__main__':
Caption().run()发布于 2015-04-01 18:09:55
您的代码有几个问题。首先是python问题:
您所得到的错误是告诉您正在尝试调用类上的实例方法(与该类的对象相反)。
place.add_widget(Enemy)place是一个类(如果您愿意的话是" type“,那么将它命名为Place以遵循一个Consti支架命名约定可能会有帮助),您需要一个类型为'place‘的对象来调用.add_widget on。类似地,Enemy是一个类,而不是一个对象,因此需要创建一个类型为Enemy的新对象。
obj.add_widget(Enemy(pos=(400,300))其中obj是place的实例,Enemy()创建敌人的实例。
现在的问题是:
您不能从python的名称中访问kv中的小部件。您必须用id标记它,然后引用该id:
ROOT = Builder.load_string('''
FloatLayout:
Button:
text: 'Go Back'
size_hint: 0.3, 0.1
pos_hint: {"x": 0, 'y':0}
place:
id: place
<place>:
Enemy:
pos: 400, 100
<Enemy>:
Image:
pos: root.pos
id: myimage
source: 'enemy.png'
''')
class Caption(App):
def build(self):
obj = ROOT.ids.place
obj.add_widget(Enemy(pos=(400,300)))
return ROOT有关更多信息,请看这里
https://stackoverflow.com/questions/29369952
复制相似问题