kivy中on_stop事件未被调用

2 投票
1 回答
1501 浏览
提问于 2025-04-18 05:09

我需要在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 个回答

2

这是在 audio_gstplayer.py 里的一个 bug - 当音频播放结束时,GstPlayer 会停止,但 Sound.state 的状态没有更新,也没有触发 on_stop 事件。

不过,如果你只是想让声音不断循环播放,可以设置 loop 属性。

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

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

撰写回答