1

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

我正在尝试在 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()

如您所见,我将课程从 更改ButtonToggleButton

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

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

4

1 回答 1

6

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

在您的情况下,您可能只需播放单个节拍器的滴答声并完成,直到下一次计时器结束。

于 2012-09-07T12:36:58.143 回答