用kivy制作动画

时间:2014-12-09 17:15:20

标签: python-2.7 kivy

我想创建一个kivy程序,当窗口到达窗口的左端时,矩形会在停止的窗口上运行。 我尝试用时钟表来解决这个问题,但它没有用。 这是代码:

from kivy.app import App
from kivy.lang import Builder

from kivy.uix.widget import Widget

from kivy.clock import Clock
from kivy.animation import Animation

from kivy.properties import ListProperty
from kivy.core.window import Window
Builder.load_string('''
<Root>:
    enemy:
        pos: 100, 300
<enemy>:
    canvas:
        Color:
            rgba: 10, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size
''')
class Root(Widget):
    pass

class enemy(Widget):
    velocity = ListProperty([1, 0])
    def __init__(self, **kwargs):
        super(ClockRect, self).__init__(**kwargs)
        Clock.schedule_interval(self.Update, 1/60.)

    def Update(self, *args):
        self.y -= self.velocity[0]
        if self.y < 1:
            self.velocity[0] = 0

class app(App):
    def build(self):
        return Root()

if __name__ == "__main__":
    app().run()

我在第14行收到错误:

 pos: 100, 300
    ^

SyntaxError:语法无效

为什么这种语法无效?

1 个答案:

答案 0 :(得分:5)

enemy被视为属性,pos: 100, 300不是有效的Python分配给属性。您的窗口小部件类名称必须以大写字母开头 - 否则解析器无法区分窗口小部件和属性。

这将有效:

Builder.load_string('''
<Root>:
    Enemy:
        pos: 100, 300
<Enemy>:
    canvas:
        Color:
            rgba: 10, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size
''')

...

class Enemy(Widget):
    ...