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