定制kivy事件问题

2024-09-21 01:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解kivy的定制事件。我正在用kivy制作一个简单的音乐播放器,我想要一些基本的功能:当一首歌结束时,下一首就会播放。Kivy的sound类提供2个事件,on_press和{}。在

显然,这里正确的选择是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,并且我希望当一首歌达到其持续时间的末尾时触发它。我该怎么写,在哪里写呢?如果有人能帮助我了解这些活动是如何运作的,我将不胜感激。在


Tags: self功能音乐initondefcallback事件
1条回答
网友
1楼 · 发布于 2024-09-21 01:18:27

事件正好在调用^{}时触发。你的问题中的代码部分缺少的是bind。你会有类似的东西

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

这告诉w在事件on_swipe发生时调用on_swipe_callback。在

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

另一个选择是,如果在UI中按下了Stop按钮,则签入您的on_stop回调。如果这首歌没有自然结束。您可以在on_press处理程序中为按钮设置一个标志,并在on_stop处理程序中清除它。在

相关问题 更多 >

    热门问题