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库实现倒计时结束播放音频 我已经解决了这个问题,具体步骤如下:
- 安装依赖库:首先需要安装
simpleaudio,它是一个轻量的WAV音频播放库,在终端运行以下命令:
pip install simpleaudio
- 修改
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() # 等待音频播放完成再继续程序逻辑
- 整合到完整代码:把
import simpleaudio as sa添加到代码开头,替换原来的update函数即可。
现在每次倒计时结束(显示00:00:00后),程序就会自动播放Te.wav音频文件啦!
内容的提问来源于stack exchange,提问作者BobbyDobby
相关产品推荐
相关产品推荐

