簡體   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