2014-12-09 3 views
1

Я хотел сделать программу 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: недопустимый синтаксис

почему этот синтаксис недействительным?

ответ

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

Большое спасибо – Gilgamesch

Смежные вопросы