使用Kivy删除小部件

时间:2018-04-26 22:09:40

标签: python kivy

我正在尝试在动画完成后删除Image窗口小部件。 到目前为止,我已设法为窗口小部件设置动画,然后在动画结束后调用animation_complete方法。不幸的是,小部件未被删除。

我做错了什么?

class ShootButton(Widget):
    def bullet_fly(self):
        def animation_complete(animation, widget):
            print "removing animation"
            self.remove_widget(widget=bullet1)


        with self.canvas:
            bullet1 = Image(source='bullet.png', pos = (100,200))
            animation1 = Animation(pos=(200, 300))
            animation1.start(bullet1)
            animation1.bind(on_complete=animation_complete)

1 个答案:

答案 0 :(得分:1)

您不必使用画布添加动画,而是使用add_widget()直接添加小部件,然后使用remove_widget()将其删除。在您最初的情况下,bullet1不是ShootButton的孩子。

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.uix.widget import Widget
from kivy.animation import Animation


Window.size = (360, 640)

class ShootButton(Widget):
    def bullet_fly(self):
        def animation_complete(animation, widget):
            self.remove_widget(widget)
        bullet1 = Image(source='bullet.png', pos = (100,200))
        self.add_widget(bullet1)
        animation1 = Animation(pos=(200, 300))
        animation1.start(bullet1)
        animation1.bind(on_complete=animation_complete)


class MyApp(App):
    def build(self):
        button = ShootButton()
        button.bullet_fly()
        return button


if __name__ == '__main__':
    MyApp().run()