python - on_stop 事件在 kivy 中没有被调用

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

最佳答案

这是 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

关于python - on_stop 事件在 kivy 中没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432116/

相关文章:

python - 将 django.request 记录到文件而不是控制台

python - Rasa 聊天机器人不会回复某些消息

python - 向 kivy 按钮添加 on_release Action

python : Count dynamic row

python - 构造一个大于任何字符串的对象

python - Scrapy CSS 选择器忽略标签并仅获取文本

python - 使用 python 在文件中搜索回文并将其打印在列表中

python - Kivy:拖放,获取文件路径

python - 如何在循环中加上整数值

python - 如何运行kivy程序?