on_stop事件没有被kivy调用

时间:2014-05-02 15:50:43

标签: python kivy

我需要在Kivy中使用on_stop事件,但似乎没有工作。请看下面的代码

任何建议:我使用的是kivy 1.8

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.audio import SoundLoader


class MyApp(App):
    def build(self):
        sound = SoundLoader.load("some_sound.ogg")
        sound.on_stop = sound.play
        sound.play()



        return Widget()

if __name__ in ('__android__', '__main__'):
    MyApp().run()

我甚至尝试使用状态来循环播放声音但是非常奇怪,即使歌曲停止时它仍然会将其状态打印为播放。有人可以建议这有什么问题吗?

以下代码:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.audio import SoundLoader
from kivy.clock import Clock


class MyApp(App):
    def build(self):
        self.sound = SoundLoader.load("playScreen.wav")
        self.sound.on_stop = self.update
        self.sound.play()

        Clock.schedule_interval(self.update, 1.0/1)
        return Widget()

    def update(self,dt):
        print "state is ",self.sound.state
        if self.sound.state == 'stop':
            self.sound.play()

if __name__ in ('__android__', '__main__'):
    MyApp().run()

1 个答案:

答案 0 :(得分:2)

这是audio_gstplayer.py中的错误 - 当达到EOS时,GstPlayer已停止,但Sound.state未更新,on_stop事件也未被触发。

但是,如果您只是希望声音不断循环,则可以设置loop属性。

sound = SoundLoader.load('some_sound.ogg')
sound.loop = True
sound.play()

编辑:已提交拉取请求https://github.com/kivy/kivy/pull/2131