[英]How can I bind a button on the .kv file to make it play a sound?
您好,StackOverflow社区,我想寻求一些帮助,就像在问我进行长期研究之前,没有发现任何帮助。
我有一个学校项目,我决定使用Kivy跨平台使用Python进行编码。 我的项目是有关SoundBox的,为简化起见,我需要先创建按钮并将其绑定以播放各种声音。 在纯python代码(没有.kv文件)上,我学习了如何绑定按钮以使其发出声音,因此我决定进入下一级别,即“屏幕管理”部分。 我有点了解到现在可以使用.kv文件使其变得简单,但是我仍然坚持如何使用.kv文件绑定按钮。
我尝试了一些方法,但是总是在控制台上出现错误,但是(暂时还不很重要),我的Fade Transition不起作用。 在此先感谢您的帮助。
的.py:
from kivy.app import App
from kivy.uix.button import Button
from kivy.core.audio import SoundLoader
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
sound = SoundLoader.load('Sunset_Lover.ogg')
sm = ScreenManager()
class ScreenManager(ScreenManager):
pass
class Menu(Screen):
pass
class Genre(Screen):
pass
class TestApp(App):
def build(self):
sm.add_widget(Menu(name='menu'))
sm.add_widget(Genre(name='genre'))
return sm
def son(self, instance):
if sound:
sound.play()
if __name__ == "__main__":
TestApp().run()
.kv:
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
<ScreenManager>:
FadeTransition:
Menu:
Genre:
<Menu>:
BoxLayout:
Button:
text: "Commencer"
size_hint: 1, 1
pos_hint: {'x': 0.3, 'y':0.3}
on_press: root.manager.current = 'genre'
<Genre>:
BoxLayout:
Button:
text: "Exemple1"
size_hint: 0.2, 0.2
pos_hint: {'x': 0.2, 'y':0.2}
on_press: root.son()
问题是您的sound
超出了可以在kv文件中使用的范围。 首先,将其移动到可以访问的位置:
class TestApp(App):
def build(self):
self.sound = SoundLoader.load('file')
sm = ScreenManager()
sm.add_widget(Menu(name='menu'))
sm.add_widget(Genre(name='genre'))
return sm
然后以更有效的方式收集参数-这样,您就可以在kv和python中使用它,并且将收集其他args(不会引发错误)
def son(self, *args):
if self.sound:
self.sound.play()
然后在kv中,您必须确保ScreenManager
仅接收适当的小部件,即仅Screen
。 要获得过渡工作,你必须将它添加到它是一个变量,从使用 :
<ScreenManager>:
transition: FadeTransition()
Menu:
Genre:
要实际播放声音(运行方法),您可以从在App
实例中定义声音的地方调用它:
<Genre>:
BoxLayout:
Button:
text: "Exemple1"
size_hint: 0.2, 0.2
pos_hint: {'x': 0.2, 'y':0.2}
on_press: app.son() # here
您可以将其导入到kv文件中:
#: import sound __main__.sound
Button:
on_release: sound()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.