树莓派和Python(TKinter和Omxplayer)

问题描述:

我们在python中制作了一个闹钟程序,当当前时间等于用户设置的闹钟时间时,它使用TKinter显示单词“ALARM”。现在我们试图给程序添加一个闹钟声音,所以当前时间达到设置的闹钟时间时会播放声音。 由于某些奇怪的原因,当前时间到达闹钟时间时,闹钟声音会一次打开并播放大约7次,然后退出。 我们尝试了几种不同的方法让它只播放一次声音文件,但没有任何效果。你们有什么建议吗?如果需要,我可以发布更具体的信息/截图。 :)树莓派和Python(TKinter和Omxplayer)

到目前为止的代码:

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() 
+0

为什么你每10毫秒轮询一次,如果你知道时间每秒只有一次机会? – 2014-10-17 11:15:44

不知道omxplayer,但如果它播放声音后退出,你可以简单地等待它完成,如:

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

感谢您的回复:) 我试过了,谢天谢地运行了playProcess,除了没有播放声音。 – Mel 2014-10-18 04:51:52