繁体   English   中英

如何在.kv文件上绑定按钮以使其播放声音?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM