2017-02-24 36 views
0

你好StackOverflow社區, 我想問一些幫助像以前一樣問我做了很長時間的研究,但沒有找到任何幫助我。如何綁定.kv文件上的按鈕以使其播放聲音?

我有一個學校項目,我決定用Python使用Kivy進行代碼跨平臺。我的項目是關於一個SoundBox,爲了簡化我需要先創建按鈕並綁定它們以播放各種聲音。在純Python代碼中(沒有.kv文件),我學會了如何綁定一個按鈕以使其播放聲音,因此我決定進入下一個屏幕管理部分。我瞭解到,現在使用.kv文件使其變得簡單,但我堅持如何使用.kv文件綁定按鈕。

我嘗試了一些東西,但總是在控制檯上出現錯誤,(但現在並不重要),我的淡入淡出過渡不起作用。 您的幫助是高度讚賞,在此先感謝。

的.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() 

回答

0

的問題是,你有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 

然後收集更有效的方式的觀點 - 這種方式,您可以在千伏和Python以及額外的參數使用它都將被收集(不會拋出一個錯誤)

def son(self, *args): 
     if self.sound: 
      self.sound.play() 

然後在千伏,你必須確保ScreenManager臨危只有適當的部件,即只有Screen秒。要獲得過渡工作,你必須將它添加到一個變量是used from

<ScreenManager>: 
    transition: FadeTransition() 
    Menu: 
    Genre: 

而實際播放聲音(運行方法),你可以從這個地方叫什麼你在IE從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 
0

你可以把它導入到KV文件:

#: import sound __main__.sound 

Button: 
    on_release: sound()