试图在kivy中构建一个节拍器 - 事件循环管理

时间:2012-09-07 11:31:30

标签: python events loops kivy

因为我在这里找不到任何东西,所以我试着提出我的问题。

我正试图在kivy中构建一个简单的节拍器。我基本上采用了随安装提供的音频示例,并希望添加一个节拍器功能。

class AudioButton(ToggleButton):

    filename = StringProperty(None)
    sound = ObjectProperty(None)

    def on_filename(self, instance, value):
        # the first time that the filename is set, we are loading the sample
        if self.sound is None:
            self.sound = SoundLoader.load(value)

    def on_press(self):
        # stop the sound if it's currently playing
        if self.sound.status != 'stop':
            self.sound.stop()
        self.sound.play()

如您所见,我将课程从Button更改为ToggleButton

我尝试使用while放置一个self.sound.play()循环,但这导致无穷大,所以基本上我正在寻找一种方法来摆脱循环,如果我再次按下按钮

我没有真正理解文档中的事件循环管理,我认为应该是答案,但我之前从未使用过事件循环。 如果有人可以为这种情况提供一些示例代码,那就太好了。

1 个答案:

答案 0 :(得分:6)

您想要开始寻找的地方是在讨论clock events的Kivy文档中。在像这样的事件驱动系统中,任何类型的while循环都会使系统瘫痪。相反,当你想要定期发生某些事情时,你要求系统设置一个计时器并告诉它你每次计时器过去时想要调用的函数。

在你的情况下,你可能只是播放那个单节拍器,并在下次定时器结束时完成。