python - kivy:在幻灯片过渡开始时播放声音,并在按下按钮时停止

标签 python audio kivy

我正在为自己的镜头建立一个从别人那里获取反馈的应用程序,并且我想通告大家直到有人来并按开始按钮。该公告位于mp3文件中。
我想在出现screen0时播放声音,但想在按下开始按钮时停止播放声音。如何实现这一点请帮助。
这是main.py文件
main.py

from kivy.app import App # Use of fields and methods of Kivy
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class Screen0(Screen):
    pass

class Screen1(Screen):
    pass

class Screen2(Screen):
    pass

class Screen3(Screen):
    pass

class Screen4(Screen):
    pass

class Screen5(Screen):
    def on_start(self):
        Clock.schedule_once(self.change_screen, 0.5)

    def change_screen(self, *kwargs):
         app.root.transition = SlideTransition(direction="left")
         app.root.current = "screen2"
         print("bye BYE")
class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("style.kv")

class MyApp(App):
    def build(self):
        return presentation

myApp = MyApp()
myApp.run()
这是kv文件
style.kv
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
ScreenManagement:
    transition: SlideTransition()
    Screen0:
    Screen1:
    Screen2:
    Screen3:
    Screen4:
    Screen5:
<Screen0>:
    name: "screen0"
    FloatLayout:
        Label:
            text: "PLEASE GIVE US YOUR \n VALUABLE FEEDBACK!"
            pos_hint: {"top": 1.2}
            font_size: 48
            color: 1,1,1,1  
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen2"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.5, "center_y":.4} 
            text: "START"
            
            background_color: (0.0, 1.0, 0, 1.0)
            font_size: 24
<Screen1>:
    name: "screen1"
    FloatLayout:
        Label:
            text: "WHICH IS YOUR FAVORITE SWEET?"
            pos_hint: {"top": 1.2}
            font_size: 48
            color: 1,1,0,1  
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen2"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.2, "center_y":.4} 
            text: "HALDIRAMS \n KAJU KATHALI"
            
            background_color: (0.0, 1.0, 1.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen2"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.4, "center_y":.4}
            text: "HALDIRAMS \n SONPAPDI"
            background_color: (1.0, 0.0, 0.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen2"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.6, "center_y":.4}
            text: "HALDIRAMS \n BADAM HALWA"
            background_color: (1.0, 1.0, 0.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen2"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.8, "center_y":.4}
            text: "HALDIRAMS \n RASGULLA"
            background_color: (0.8, 0.3, 0.4, 1.0)
            font_size: 18
<Screen2>:
    name: "screen2"
    FloatLayout:
        Label:
            text: "AFTER HOW MUCH TIME \n YOU GOT THE ORDER?"
            pos_hint: {"top": 1.2}
            font_size: 48
            color: 1,1,0,1
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen3"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.2, "center_y":.4}
            text: "Immediatly"

            background_color: (0.0, 0.5, 1.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen3"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.4, "center_y":.4}
            text: "In 5 to\n 15 Min"
            background_color: (1.0, 0.4, 0.8, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen3"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.6, "center_y":.4}
            text: "In 15 to\n 30 Min"
            background_color: (1.0, 0.8, 0.4, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen3"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.8, "center_y":.4}
            text: "45 Min or More"
            background_color: (1.0, 0.0, 1.0, 1.0)
            font_size: 18
<Screen3>:
    name: "screen3"
    FloatLayout:
        Label:
            text: "HOW WAS THE BEHAVIOUR \n OF MANAGER/SERVENT?"
            pos_hint: {"top": 1.2}
            font_size: 48
            color: 1,1,0,1
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen4"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.2, "center_y":.4}
            text: "VERY GOOD"

            background_color: (0.0, 0.5, 1.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen4"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.4, "center_y":.4}
            text: "GOOD"
            background_color: (1.0, 0.8, 0.4, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen4"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.6, "center_y":.4}
            text: "NOT SO \nGOOD"
            background_color: (1.0, 0.4, 0.8, 1.0)
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen4"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.8, "center_y":.4}
            text: "VERY BAD"
            background_color: (1.0, 1.0, 0.0, 1.0)
<Screen4>:
    name: "screen4"
    FloatLayout:
        Label:
            text: "WILL YOU AGAIN SHOP IN \n OUR STORE?"
            pos_hint: {"top": 1.2}
            font_size: 48
            color: 1,1,0,1
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen5"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.2, "center_y":.4}
            text: "DEFINETLY"

            background_color: (0.5, 1, 1.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen5"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.4, "center_y":.4}
            text: "YES"
            background_color: (1.0, 0.0, 0.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen5"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.6, "center_y":.4}
            text: "NO"
            background_color: (1.0, 1.0, 0.0, 1.0)
            font_size: 18
        Button:
            on_release:
                app.root.transition = SlideTransition(direction="left")
                app.root.current = "screen5"
            size_hint: 0.2, 0.8/3
            pos_hint: {"center_x":0.8, "center_y":.4}
            text: "CANT SAY"
            background_color: (1.0, 0.0, 1.0, 1.0)
            font_size: 18
<Screen5>:
    name: "screen5"
    FloatLayout:
        Label:
            text: "!!!THANK YOU FOR YOUR\n FEEDBACK+ \n HAVE A NICE DAY!!!"
            pos_hint: {"top":1.2}
            font_size: 48
            color: 1,1,1,1
请分享一些建议

最佳答案

MyApp中,添加用于处理声音的代码:

class MyApp(App):
    def build(self):
        self.sound = SoundLoader.load('test.mp3')
        self.sound.loop = True
        self.sound.play()
        return presentation

    def stop_sound(self):
        self.sound.stop()

然后,在您的“kv”中,将Start Button规则更改为:
    Button:
        on_release:
            app.root.transition = SlideTransition(direction="left")
            app.root.current = "screen2"
            app.stop_sound()
        size_hint: 0.2, 0.8/3
        pos_hint: {"center_x":0.5, "center_y":.4} 
        text: "START"

关于python - kivy:在幻灯片过渡开始时播放声音,并在按下按钮时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58662831/

相关文章:

python - Django 过滤、分页和注释分页结果

iOS-FFmpeg-从音频和图像文件组成视频

Android AudioRecord - 如何允许通话

python - 显示错误 ValueError : MDTabsLabel. 颜色格式无效的选项卡 (got []) -Kivymd

python - 如何在 Kivy Spinner 中通过单击值来更改图像的来源?

python - Matplotlib 复选框(上一个和下一个)

python - 为什么空闲会跳过 f = open ('filename' , 'r' )

python - 为什么我可以在没有正确数量输入的情况下通过 f2py 调用 Fortran 子例程?

iphone - 网址中的mp3较长,无法在iPhone上加载太长

python - 如何在kivy python中使用滚动条