2016-09-12 6 views
0

Я пытаюсь запустить анимацию, когда приложение загружается впервые. И.Е. сразу после закрытия экрана загрузки. Я устал от события «on_enter», но, похоже, он не работает, любая помощь будет очень оценена.Kivy non-GUI events

from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.uix.widget import Widget 
from kivy.animation import Animation 
from kivy.properties import ListProperty 
from kivy.core.window import Window 
from random import random 
from kivy.graphics import Color, Rectangle 

Builder.load_string(''' 
<Root>: 
AnimRect: 
    pos: 500, 300 
<AnimRect>: 
on_enter: self.start_animation 
canvas: 
    Color: 
     rgba: 0, 1, 0, 1 
    Rectangle: 
     pos: self.pos 
     size: self.size 
''') 

class Root(Widget): 
pass 

class AnimRect(Widget): 
    def anim_to_random_pos(self): 
     Animation.cancel_all(self) 
     random_x = random() * (Window.width - self.width) 
     random_y = random() * (Window.height - self.height) 

     anim = Animation(x=random_x, y=random_y, 
        duration=4, 
        t='out_elastic') 
     anim.start(self) 

    def on_touch_down(self, touch): 
     if self.collide_point(*touch.pos): 
      self.anim_to_random_pos() 

    def start_animation(self, touch): 
     if self.collide_point(*touch.pos): 
      self.anim_to_random_pos() 

runTouchApp(Root()) 

print screen of error

ответ

0

Метод on_enter определяется в Screen, а не в Widget. Вы должны поместить этот прямоугольник на экран (виджет Root должен быть здесь), и как только событие экрана on_enter запускается, запустите анимацию прямоугольника.

Кроме того, вы вызываете его неправильно; вызов функции должен содержать скобки, т. е. on_enter: self.start_animation()

0

Это похоже на то, что вы хотели иметь?

Я просто удалил строку «on_enter» в вашем kv и исправил ваш отступ.

from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.uix.widget import Widget 
from kivy.animation import Animation 
from kivy.properties import ListProperty 
from kivy.core.window import Window 
from random import random 
from kivy.graphics import Color, Rectangle 

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

class Root(Widget): 
    pass 

class AnimRect(Widget): 
    def anim_to_random_pos(self): 
     Animation.cancel_all(self) 
     random_x = random() * (Window.width - self.width) 
     random_y = random() * (Window.height - self.height) 

     anim = Animation(x=random_x, y=random_y, 
        duration=4, 
        t='out_elastic') 
     anim.start(self) 

    def on_touch_down(self, touch): 
     if self.collide_point(*touch.pos): 
      self.anim_to_random_pos() 

    def start_animation(self, touch): 
     if self.collide_point(*touch.pos): 
      self.anim_to_random_pos() 

runTouchApp(Root())