You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kivy中实现跨屏幕持续播放音频?

Kivy屏幕切换后音频持续播放的解决方案

问题根源在于你原来的代码中,Sound对象是a62类play_sound方法里的局部变量。当屏幕切换离开a62后,这个局部变量会被Python的垃圾回收机制清理,导致音频被迫停止。

要让音频在屏幕切换时持续播放,需要把Sound对象放在一个生命周期更长的位置——比如App实例中,这样它不会随单个Screen的切换被销毁。

修改后的Python代码

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
from kivy.core.audio import SoundLoader
from kivy.lang import Builder

Builder.load_file("test1.kv")

class a62(Screen):
    def on_enter(self, *args):
        Clock.schedule_once(self.play_sound, 1)
        Clock.schedule_once(self.next_screen4, 1.5)
        Clock.schedule_once(self.next_screen5, 2.5)

    def play_sound(self, dt):
        app = App.get_running_app()
        # 仅在音频未播放时启动
        if app.sound and app.sound.state != 'play':
            print("playing sound123")
            app.sound.volume = 1
            app.sound.play()

    def next_screen4(self, dt):
        self.manager.current = "a17"

    def next_screen5(self, dt):
        self.manager.current = "a18"


class a17(Screen):
    pass


class a18(Screen):
    pass


class CandDApp(App):
    def build(self):
        # 将Sound对象作为App实例属性初始化
        self.sound = SoundLoader.load('sound/music.mp3')
        sm = ScreenManager()
        sm.add_widget(a62(name="a62"))
        sm.add_widget(a17(name="a17"))
        sm.add_widget(a18(name="a18"))
        return sm

    def on_stop(self):
        # 退出应用时停止音频,释放资源
        if self.sound:
            self.sound.stop()


if __name__ == "__main__":
    CandDApp().run()

KV代码保持不变

<a62>:
    Button:
        text: "a62"
<a17>:
    Button:
        text: "a17"
<a18>:
    Button:
        text: "a18"

关键修改说明

  1. Sound对象全局化:把SoundLoader.load的结果赋值给App的实例属性self.sound,让它的生命周期和整个应用绑定,不会因屏幕切换被回收。
  2. 跨Screen调用音频:在a62的播放方法中,通过App.get_running_app()获取当前App实例,调用其sound属性来控制播放。
  3. 资源清理:添加on_stop方法,在应用退出时停止音频,避免不必要的资源占用。
  4. 防重复播放:增加播放状态判断,确保只有在音频未播放时才触发播放操作。

内容的提问来源于stack exchange,提问作者Courtney G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:40:16