Hello 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()
答案 0 :(得分:0)
问题是你在kv文件中可以使用的任何范围都有sound
。首先,将其移动到可以访问它的位置:
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
。要使转换有效,您必须将其添加到变量used from:
<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
答案 1 :(得分:0)
您可以将其导入kv文件:
#: import sound __main__.sound
Button:
on_release: sound()