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

Python倒计时器实现归零自动播放音频的方法

问题:如何在Tkinter倒计时器归零后触发音频播放?

我是个编程新手,刚接触Python,最近做了一个叫“Tequila timer”的Tkinter倒计时器。现在想实现一个功能:当倒计时归零时(比如按下1分钟按钮后倒计时结束)自动播放音频文件,但我不清楚怎么在Python里播放音频,也不知道怎么把播放逻辑和倒计时归零(counter="00:00:00")的条件关联起来。

以下是我最初的完整代码:

import tkinter as tk

def update(seconds):
    global after
    if seconds >= 0:
        countdown.set(seconds_to_time(seconds))
        after = root.after(1000, lambda: update(seconds - 1))
    else:
        root.after_cancel(after)

def seconds_to_time(seconds):
    hours = seconds // 3600
    seconds -= hours * 3600
    minutes = seconds // 60
    seconds -= minutes * 60
    return f'{hours:02d}:{minutes:02d}:{seconds:02d}'

def stop():
    try:
        root.after_cancel(after)
    except NameError:
        pass

# GUI
root = tk.Tk()
root.title("Tequila timer")

# 加载龙舌兰酒瓶背景
canvas = tk.Canvas(root, width=423, height=700)
canvas.pack()
Load = tk.PhotoImage(file="Flaske.png")
canvas.create_image(211, 350, image=Load)

countdown = tk.StringVar()
countdown.set("00:00:00")

# 功能按钮
btn_10sek = tk.Button(root, text="10 sekunder", width=10, height=5, command=lambda: update(10))
btn_10sek_v = canvas.create_window(140, 300, window=btn_10sek)

btn_1min = tk.Button(root, text="1 min", width=10, height=5, command=lambda: update(60))
btn_1min_v = canvas.create_window(283, 300, window=btn_1min)

btn_10min = tk.Button(root, text="10 min", width=10, height=5, command=lambda: update(60 * 10))
bt1_10min_v = canvas.create_window(140, 425, window=btn_10min)

btn_1time = tk.Button(root, text="1 time", width=10, height=5, command=lambda: update(3600))
bt1_1time_v = canvas.create_window(283, 425, window=btn_1time)

btn_2timer = tk.Button(root, text="2 timer", width=10, height=5, command=lambda: update(7200))
bt1_2timer_v = canvas.create_window(140, 550, window=btn_2timer)

btn_stop = tk.Button(root, text="Stop tiden", width=10, height=5, command=stop)
bt1_stop_v = canvas.create_window(283, 550, window=btn_stop)

btn_luk = tk.Button(root, text="Luk ned", width=12, height=3, command=root.quit)
bt1_luk_v = canvas.create_window(211, 635, window=btn_luk)

# 倒计时显示
label = tk.Label(root, textvariable=countdown, width=9, font=("arial black", 40, "bold"), fg="red")
label.pack()
label_v = canvas.create_window(211, 165, window=label)

# 标题
over = tk.Label(root, text="Tequila timer", font=("arial black", 40, "bold"), fg="red")
over.pack()
over_v = canvas.create_window(211, 30, window=over)

root.mainloop()

解决方案:使用simpleaudio库实现倒计时结束播放音频

我已经解决了这个问题,具体步骤如下:

  1. 安装依赖库:首先需要安装simpleaudio,它是一个轻量的WAV音频播放库,在终端运行以下命令:
pip install simpleaudio
  1. 修改update函数:在倒计时结束的逻辑分支里(也就是seconds < 0时,因为倒计时到0后,下一次调用会传入-1),添加音频播放代码,这样就能精准关联倒计时归零的触发条件。

修改后的update函数:

import simpleaudio as sa

def update(seconds):
    global after
    if seconds >= 0:
        countdown.set(seconds_to_time(seconds))
        after = root.after(1000, lambda: update(seconds - 1))
    else:
        root.after_cancel(after)
        if seconds < 0:
            # 加载并播放指定WAV音频文件
            wave_obj = sa.WaveObject.from_wave_file("Te.wav")
            play_obj = wave_obj.play()
            play_obj.wait_done()  # 等待音频播放完成再继续程序逻辑
  1. 整合到完整代码:把import simpleaudio as sa添加到代码开头,替换原来的update函数即可。

现在每次倒计时结束(显示00:00:00后),程序就会自动播放Te.wav音频文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:57:34