2015-02-08 117 views
0

我最近發佈了類似的話題,但是這次我會盡量做得更清楚明確。我的問題是,基維的小部件沒有像預期的那樣動畫。下面是一些示例代碼,爲什麼散射更好的動畫比小部件:Python Kivy小部件動畫

from kivy.app import App 
from kivy.core.window import Window 
from kivy.uix.widget import Widget 
from kivy.uix.scatter import Scatter 
from kivy.animation import Animation 
from kivy.graphics import Color, Rectangle 

class ExampleWidget(Widget): 
    def __init__(self, **kwargs): 
     super(ExampleWidget, self).__init__(**kwargs) 
     self.size = (100,100) 
     self.pos = (100,100) 
     with self.canvas: 
      Color(1,0,0) 
      self.texture = Rectangle(size=self.size, pos=self.pos) 

    def on_pos(self, obj, value): 
     try: self.texture.pos = value 
     except: pass 

class ExampleScatterTexture(Widget): 
    def __init__(self, **kwargs): 
     super(ExampleScatterTexture, self).__init__(**kwargs) 
     with self.canvas: 
      Color(0,1,0) 
      texture = Rectangle(size=self.size, pos=self.pos) 

class ExampleScatter(Scatter): 
    def __init__(self, **kwargs): 
     super(ExampleScatter, self).__init__(**kwargs) 
     self.do_rotation = False 
     self.do_scale = False 
     self.do_translation = False 
     self.size = (100,100) 
     self.pos = (100,300) 
     texture = ExampleScatterTexture(size=self.size) 
     self.add_widget(texture) 

class ExampleScreen(Widget): 
    def __init__(self, **kwargs): 
     super(ExampleScreen, self).__init__(**kwargs) 
     self.size = Window.size 

     example_widget = ExampleWidget() 
     self.add_widget(example_widget) 

     example_scatter = ExampleScatter() 
     self.add_widget(example_scatter) 

     #SCATTER IS GREEN, WIDGET IS RED 
     example_widget_animation = Animation(pos=(300,100), duration=2., t='in_bounce') + Animation(pos=(100,100), duration=2., t='in_bounce') 
     example_scatter_animation = Animation(pos=(300,300), duration=2., t='in_bounce') + Animation(pos=(100,300), duration=2., t='in_bounce') 
     example_widget_animation.repeat = True 
     example_scatter_animation.repeat = True 
     example_widget_animation.start(example_widget) 
     example_scatter_animation.start(example_scatter) 

class BadAnimationExample(App): 
    def build(self): 
     root = ExampleScreen() 
     return root 

if __name__ == "__main__": 
    BadAnimationExample().run() 

正如你所看到的,小部件的動畫被執行速度非常快,然後總會有一個暫停,而分散的動畫是非常像我們期望它成爲。我的問題是,當我將手指放在散點圖上時,所有on_touch_move()函數都不起作用。有沒有解決方法?

回答

0

好的,我解決了這個問題。我在子構件類中使用了on_touch_move()方法,解決方案是在父構件中使用它。那麼分散選擇就沒有問題。