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

如何在Tkinter中同时用playsound播放音频并在输入框输入内容?

在Tkinter中实现音频播放时可输入内容

问题描述

我希望在play_audio函数运行时,能在user_text输入框中输入内容。尝试了以下代码:

from tkinter import *
from playsound import playsound

root = Tk()

def play_audio():
    playsound('audio.mp3')

play_audio_button = Button(root, text='Play audio', command=play_audio)
user_text = Entry(root)

play_audio_button.pack()
user_text.pack(padx=10, pady=10)

mainloop()

但播放音频时无法进行任何操作,只能等音频结束后才能输入。而不用Tkinter的代码可以正常边播放边输入:

def play_audio():
    playsound('audio.mp3')

play_audio()
play_audio_input = input('Your text: \n')

请问如何在Tkinter中实现该功能?


解决方案

Tkinter是单线程框架,主线程负责处理所有GUI交互事件(比如输入、按钮点击)。playsound默认是阻塞式运行,会占用主线程,导致GUI完全无法响应,直到音频播放完成。

解决核心是把音频播放操作放到子线程中执行,让主线程专注处理GUI交互,代码实现如下:

from tkinter import *
from playsound import playsound
import threading

root = Tk()

def play_audio():
    # 创建子线程执行音频播放逻辑
    audio_thread = threading.Thread(target=lambda: playsound('audio.mp3'))
    # 设置守护线程,窗口关闭时自动终止子线程
    audio_thread.daemon = True
    audio_thread.start()

play_audio_button = Button(root, text='Play audio', command=play_audio)
user_text = Entry(root)

play_audio_button.pack()
user_text.pack(padx=10, pady=10)

mainloop()

关键说明

  • 用threading.Thread创建独立子线程,将playsound的调用作为线程执行目标
  • daemon=True:确保主程序(Tkinter窗口)关闭时,子线程自动终止,避免残留后台进程
  • 子线程运行音频播放时,主线程仍能响应输入框的输入操作,实现边播放边输入的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50