2016-09-12 4 views
0

Ich versuche eine Animation zu starten, wenn die App zum ersten Mal geladen wird. I.E. unmittelbar nachdem der Ladebildschirm geschlossen wurde. Ich habe das "on_enter" Event gemixt, aber es scheint nicht zu funktionieren, jede Hilfe wäre sehr willkommen.Kivy nicht-GUI Ereignisse

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

Antwort

0

on_enter Die Methode ist in den Screen, nicht in den Widget definiert. Sie sollten dieses Rechteck auf einem Bildschirm platzieren (das Widget Root sollte hier ein Bildschirm sein), und sobald das Ereignis on_enter des Bildschirms ausgelöst wird, starten Sie die Rechteckanimation.

Auch Sie nennen es falsch; Funktionsaufruf sollte Klammern enthalten, d. h. on_enter: self.start_animation()

0

Sieht es aus wie etwas, das Sie haben wollten?

Ich habe gerade die Zeile "on_enter" in Ihrem kv gelöscht und Ihren Einzug korrigiert.

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())