自定义 KIVY 事件问题



我无法理解 kivy 的自定义事件。我正在使用kivy制作一个简单的音乐播放器,我想要一些基本功能:当一首歌结束时,下一首歌播放。Kivy的声音课提供2个事件,on_presson_stop

显然,这里的正确选择是 on_stop .但是,当歌曲自然结束时和用户手动停止时,都会触发此事件。问题是,我不希望后者发生,所以我决定应该创建一个自定义事件。在线上可用于帮助我了解自定义事件的资源很少且令人困惑。这是 kivy 文档中的示例:

class MyWidget(Widget):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.register_event_type('on_swipe')
    def on_swipe(self):
        pass
def on_swipe_callback(*largs):
    print('my swipe is called', largs)
w = MyWidget()
w.dispatch('on_swipe')

所以,我们有事件(on_swipe)和一个事件处理程序(on_swipe_callback)。何时应触发此事件?我该如何定义它?假设我希望我的事件被称为 on_finish ,并且我希望在歌曲达到其持续时间结束时触发它。我如何以及在哪里写下有关此的详细信息?如果有人能帮助我了解这些事件是如何运作的,我将不胜感激。

该事件恰好在调用dispatch时触发。您的问题中的代码中缺少的是bind。你会有类似的东西

w = MyWidget()
w.bind(on_swipe=on_swipe_callback)

这会告知w在事件发生on_swipe时调用on_swipe_callback

关于您最初的问题,这可能比看起来更困难,因为在on_stop时,声音中的当前位置是未知的。一个相当黑客的解决方案可能是使用 Clock 来安排一个函数,该函数检查声音是否仍在声音结束之前播放。当然,这将关闭,例如,如果用户寻求。最后,您可能必须直接更改 Soundkivy.audio 才能生成新事件。

另一种选择是在 UI 中按下"停止"按钮时签入on_stop回调。如果不是,那么这首歌"自然"结束。您将在on_press处理程序中为按钮设置一个标志,并在on_stop处理程序中清除它。

最新更新