我想创建一个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:语法无效
为什么这种语法无效?
答案 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):
...