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')
我试过寻找这个问题的答案,但运气不佳。
我正在尝试在 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')