树莓派与Python(TKinter和Omxplayer)

0 投票
1 回答
1711 浏览
提问于 2025-04-28 02:30

我们用Python写了一个闹钟程序,使用TKinter来显示“ALARM”这个字,当当前时间等于用户设置的闹钟时间时。现在我们想给这个程序添加一个闹钟声音,这样当当前时间到达设定的闹钟时间时,就会播放声音。

但是有个奇怪的情况,当当前时间到达闹钟时间时,闹钟声音会同时播放大约7次,然后就停止了。

我们尝试了几种不同的方法,希望能让声音只播放一次,但都没有成功。你们有什么建议吗?如果需要的话,我可以提供更具体的信息或截图。:)

到目前为止的代码:

import time
import subprocess

#GUI Setup
from Tkinter import *
alarm_window = Tk()
alarm_window.configure(bg = 'lightblue')
alarm_window.title('Alarm Clock!')

display = Label(alarm_window, font = ('Arial', 25), bg = 'lightblue', width = 13, height = 1, borderwidth = 2)
display.grid(row = 1, column = 1, columnspan = 6)

current_time = time.strftime("%H:%M:%S")

def refresh_time():
    global current_time
    current_time = time.strftime("%H:%M:%S")

    if current_time == times.get():
        alarm_window.configure(bg='red')
        timelabel.configure(bg='red')
        alarmdisplay = Label(alarm_window, font = ('Arial', 25), text = 'ALARM', bg='red', width = 13, height = 1, borderwidth = 2,)
        alarmdisplay.grid(row = 2, column = 1, columnspan = 6)

        playProcess = subprocess.Popen(['omxplayer', '/home/pi/Digital Alarm.mp3?dl=0'])

    display.config(text=current_time)
    display.after(10, refresh_time)

timelabel = Label(alarm_window, text = 'Enter H:M:S', bg = 'lightblue')
timelabel.grid(row = 2, column = 1)
times = Entry(alarm_window, width = 10, bg = 'lightgrey', justify = CENTER)
times.grid(row = 2, column = 2, columnspan = 5)

times.focus()

refresh_time()
alarm_window.mainloop()
暂无标签

1 个回答

0

我不知道 omxplayer 是什么,但如果它在播放完声音后就退出,你可以简单地等它播放完再继续,比如这样:

playProcess = subprocess.Popen(['omxplayer', '/home/pi/Digital Alarm.mp3?dl=0'])
playProcess.wait()

撰写回答