Voici un petit réveil en Python.
Vous réglez l'heure à laquelle vous souhaitez être réveillé, vous choisissez un fichier .wav ou .ogg en guise de sonnerie et vous activez. Le programme vous réveillera à l'heure dite.
Il nécessite le module pygame pour fonctionner.
Source / Exemple :
#!/usr/env python
# -*- coding: utf-8 -*-
#AUTHOR: Jean-Baptiste Jung - www.jbjweb.com
#LICENSE: GPL - see http://www.gnu.org/copyleft/gpl.html for details
from Tkinter import *
import time, string, sys, tkFileDialog, threading, pygame.mixer, ConfigParser
class myThread(threading.Thread):
def __init__(self, string_heureDeSonnerie):
threading.Thread.__init__(self, target=self.run, args=())
self.string_heureDeSonnerie = string_heureDeSonnerie
self.test=True
self.start()
def run(self):
while(self.test):
heure_courante = time.strftime("%H:%M:%S")
if (self.string_heureDeSonnerie == heure_courante):
pygame.mixer.init()
sound = pygame.mixer.Sound(musique)
sound.play(-1)
self.test=False
else:
time.sleep (1)
def clock():
"""Donne l'heure courante au format hh:mmm:ss et l'affiche"""
temps = time.strftime("%H:%M:%S")
heure_actuelle.config(text=temps)
root.after(200, clock)
def activer():
global t
"""Vérifie que les parametres necessaires sont corrects et active le réveil"""
if (activer.cget("text") == "Activer"):
hours = heure.get()
mins = minutes.get()
if (hours.isdigit()== False or int(hours) > 23):
erreur("Heures: paramètres invalides")
elif (mins.isdigit() == False or int(mins) > 59):
erreur("Minutes: paramètres invalides")
elif (musique == ""):
erreur("Aucune sonnerie définie")
else:
erreur("parametres: ok")
heure_sonnerie = hours+':'+mins+':'+'00'
sauverParametres()
t = myThread(heure_sonnerie)
etat.config(text="Etat: Sonnera à "+heure_sonnerie[0:5])
activer.config(text="Stopper")
elif (activer.cget("text") == "Stopper"):
if (pygame.mixer.get_busy()):
pygame.mixer.stop()
t.test = False
etat.config(text="Etat: Inactif")
activer.config(text="Activer")
def choisirSonnerie():
"""permet de choisir la sonnerie du réveil"""
global musique
musique = tkFileDialog.askopenfilename()
#TODO: vérifier que le fichier est bien une musique
if (musique.endswith(".wav") or musique.endswith(".ogg")):
s.config(text = "Sonnerie: "+str(musique))
erreur("Sonnerie: ok")
else:
musique =""
erreur("Seuls les formats wav et ogg sont acceptés")
def erreur(string_erreur):
"""Affiche l'erreur correspondante"""
message_erreur.config(text=string_erreur)
def testerSonnerie():
"""permet de tester la sonnerie"""
if (test_sonnerie.cget("text") == "Tester la sonnerie"):
if (musique ==""):
erreur("Veuillez choisir une sonnerie.")
else:
pygame.mixer.init()
sound = pygame.mixer.Sound(musique)
sound.play(-1)
test_sonnerie.config(text="Arretter le test")
erreur("Sonnerie: en test")
elif (test_sonnerie.cget("text") == "Arretter le test"):
if (pygame.mixer.get_busy()):
pygame.mixer.stop()
erreur("")
test_sonnerie.config(text="Tester la sonnerie")
def restaurerParametres():
"""restaure les parametres présents dans le fichier 'config.ini' si présent"""
global musique
try:
conf = ConfigParser.ConfigParser()
conf.read("config.ini")
conf_heures = conf.get("MAIN", "heures")
heure.delete(0, END)
heure.insert(END, conf_heures)
conf_minutes = conf.get("MAIN", "minutes")
minutes.delete(0, END)
minutes.insert(END, conf_minutes)
conf_sonnerie = conf.get("MAIN", "sonnerie")
musique = conf_sonnerie
s.config(text="Sonnerie: "+conf_sonnerie)
except:
creerFichier()
def sauverParametres():
"""Enregistre les parametres dans le fichier 'config.ini'"""
try:
fichier = open("config.ini", "w")
fichier.write("")
fichier.close()
conf = ConfigParser.ConfigParser()
conf.read("config.ini")
conf.add_section("MAIN")
conf.set("MAIN", "heures", heure.get())
conf.set("MAIN", "minutes", minutes.get())
conf.set("MAIN", "sonnerie", musique)
conf.write(open("config.ini","w"))
except:
erreur("Erreur dans l'enregistrement des paramètres")
def creerFichier():
try:
conf = ConfigParser.ConfigParser()
conf.add_section("MAIN")
conf.set("MAIN", "heures", "")
conf.set("MAIN", "minutes", "")
conf.set("MAIN", "sonnerie", "")
conf.write(open('config.ini','w'))
except:
erreur("Impossible de créer le fichier de sauvegarde")
def quitter():
global t
try:
t.test=False #arret du thread
t.join()
except NameError: pass #Ignorer l'erreur, le thread n'a pas été lancé
if (pygame.mixer.get_busy()):
pygame.mixer.stop() #arret du mixer
root.destroy() #destruction de la fenetre
sys.exit(0) #arret du programme
musique = ""
#GUI
root = Tk()
root.title("JBJ Réveil")
heure_actuelle = Label()
heure_actuelle.grid(row=0, column=0, columnspan = 3, sticky="n")
etat = Label(text="Etat: Inactif")
etat.grid(row = 1, column = 0, columnspan=3, sticky="w")
heure_reveil = Label(text="Heure de réveil: ")
heure_reveil.grid(row = 2, column = 0, columnspan=2, sticky="w")
frame= Frame()
frame.grid(row =2, column =2, sticky="w")
heure = Entry(frame, width=2)
heure.grid( row = 0, column = 0, sticky="w")
h = Label(frame, text="h")
h.grid(row = 0, column = 1, sticky="w")
minutes = Entry(frame, width=2)
minutes.grid(row = 0, column = 2, sticky="w")
s = Label(text="Sonnerie : Aucune")
s.grid(row = 3, column = 0, columnspan =3, sticky ="w")
activer = Button(text="Activer", command = activer)
activer.grid(row = 4, column = 0, sticky="w")
choix_sonnerie = Button(text = "Sonnerie", command = choisirSonnerie)
choix_sonnerie.grid(row = 4, column = 1, sticky="w")
test_sonnerie = Button(text="Tester la sonnerie", command = testerSonnerie)
test_sonnerie.grid(row = 4, column = 2, sticky="w")
message_erreur = Label()
message_erreur.grid(row = 5, column = 0, columnspan = 3, sticky="w")
clock()
restaurerParametres()
root.protocol("WM_DELETE_WINDOW", quitter)
root.mainloop()
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.