from tkinter import *
from tkinter import messagebox
import pygame
import time
pygame.init()
def alarm_time():
hrs = int(hrs_opt_ctrl.get())
min = int(min_opt_ctrl.get())
tme = tme_ctrl.get()
if hrs == int(time.strftime('%I')) and min == int(time.strftime('%M')) and tme == time.strftime('%p'):
# Time is up. Play the sound
alarm_ringtone = pygame.mixer.music.load('alarm_noise.mp3')
pygame.mixer.music.play()
# Don't call after again
else:
# Not time, sleep for 1 second
window.after(1000, alarm_time)
def snooze_time():
snoz_min=(2,5,10,20,30,35,40,45,50,55,59)
snooze=True
while snooze:
try:
min = min + int(snoz_min[minute])
window.after((min)*1000,alarm_time)
except:
messagebox.showerror("Error 404", "Cannot Snooze for given Time")
if minute<=len(snoz_min):
minute+=1
elif minute!=len(snoz_min):
minute=0
else:
pass
snooze=False
window=Tk()
window.title('Alarm')
window.config(background='black')
logo=PhotoImage(file='alarm.gif')
lab_1=Label(window,text='Alarm',bg='black',fg='white',font=('Times',25,'bold')).grid(column=100,row=0)
lab_2=Label(window,bg='black',image=logo).grid(column=300,row=0)
lab_3=Label(window,text='Hours',bg='black',fg='white',font=('Comic',10,'bold')).grid(column=50,row=130)
lab_4=Label(window,text='Minutes',bg='black',fg='white',font=('Comic',10,'bold')).grid(column=85,row=130)
opt_hrs=[]
opt_min=[]
opt_tme=('AM','PM')
minute=0
for i in range(1,13):
opt_hrs.append(i)
for j in range(0,60):
opt_min.append(j)
hrs_opt_ctrl=StringVar()
min_opt_ctrl=StringVar()
tme_ctrl=StringVar()
tme_ctrl.set(opt_tme[0])
hrs_lab=OptionMenu(window,hrs_opt_ctrl,*opt_hrs).grid(column=60,row=130,columnspan=15)
min_lab=OptionMenu(window,min_opt_ctrl,*opt_min).grid(column=86,row=130,columnspan=15)
tme_lab=OptionMenu(window,tme_ctrl,*opt_tme).grid(column=150,row=130)
but_1=Button(window,text='Set Alarm',font=('Comic',10,'bold'),command=alarm_time).grid(column=100,row=240)
but_2=Button(window,text='Snooze',font=('Comic',10,'bold'),command=snooze_time).grid(column=100,row=250)
window.mainloop()
以下代码在运行时不会显示任何错误,但不会发出警报。 警报文件的扩展名为.mp3,与项目位于同一文件夹中。 我可能认为时间模块代码有问题 或“设置警报”按钮未输入任何内容。列和行的位置不准确
答案 0 :(得分:2)
如评论中所述,您将其设置为仅当用户在设置警报时单击按钮时才播放警报。相反,您应该每秒检查一次时间,并在给定时间播放闹钟:
def alarm_time():
hrs = int(hrs_opt_ctrl.get())
min = int(min_opt_ctrl.get())
tme = tme_ctrl.get()
if hrs == int(time.strftime('%I')) and min == int(time.strftime('%M')) and tme == time.strftime('%p'):
# Time is up. Play the sound
alarm_ringtone = pygame.mixer.music.load('alarm_noise.mp3')
pygame.mixer.music.play()
# Don't call after again
else:
# Not time, sleep for 1 second
window.after(1000, alarm_time)
请注意,我将所有内容都转换为int
,因为time.strftime('%I')
和time.strftime('%M')
返回0预先填充的字符串,并且您的选项框没有0预先填充的值,因此{{ 1}}等。
更新的答案带有多个警报和贪睡功能。我只是把这些放在一起,所以有很大的改进空间:
"1" != "01"