【问题标题】:making animation with kivy用kivy制作动画
【发布时间】:2014-12-09 17:15:20
【问题描述】:

我想制作一个 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: 无效语法

为什么这个语法无效?

【问题讨论】:

    标签: python-2.7 kivy


    【解决方案1】:

    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):
        ...
    

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多