Kivy togglebutton 只转动声音 on/off 一次

Kivy togglebutton only turning sound on/off once

我试过寻找这个问题的答案,但运气不佳。

我正在尝试在 kivy 中构建一个应用程序,该应用程序可以在切换按钮时启动和停止声音。第一次切换按钮时声音符合我的要求,但第二次按钮只启动声音,但不会停止声音。

到目前为止,这是我的代码。

'''code'''

class MainApp(App):

def build(self):
    layout = BoxLayout(padding=10)
    self.oceanButton = ToggleButton(text='Ocean',
    background_normal='C:/Users/micha/Desktop/Code/Soothing Sounds/picture/oceanpic.jpg')
    self.oceanButton.bind(on_press=self.on_press_button)
    layout.add_widget(self.oceanButton)

    return layout


def on_press_button(self, *args):
    waveSound = SoundLoader.load(
         'C:/Users/micha/Desktop/Code/Soothing Sounds/sounds/ocean.wav'
        )
    
    if self.oceanButton.state == 'down':
        waveSound.play()
        waveSound.loop = True
        print('On')
    else:
        waveSound.stop()
        print('Off')

问题是您的 on_press_button() 方法总是创建 Sound 的新实例(使用 SoundLoader)。因此,当 ToggleButton 状态不是 down 时,它会在该新实例上调用 stop() 方法,并且在上一个调用中创建的 Sound 会继续播放。

您可以通过保留对创建的 Sound 实例的引用并使用该实例调用 stop():

来解决这个问题
def on_press_button(self, *args):
    if self.oceanButton.state == 'down':
        self.waveSound = SoundLoader.load(
             'C:/Users/micha/Desktop/Code/Soothing Sounds/sounds/ocean.wav'
            )
        self.waveSound.play()
        self.waveSound.loop = True
        print('On')
    else:
        self.waveSound.stop()
        print('Off')