Bonjour j’ai enfin fini mon projet mais quand je le lance, il marche 20 sec et après les seconde arrête de défiler (c'est une horloge)
donc je voulais savoir si c'est mon pc ou si c'est le fait qu il faut que je modifie quelque chose dans mon programme car il y as beaucoup trop de fonction
mon code :
import time
import threading
from tkinter import *
from tkinter import font
import pygame
fenetre = Tk()
fenetre.title('Horloge')
fenetre['bg'] = 'blue'
pygame.mixer.init()
son = pygame.mixer.Sound("Kendji Girac - Cool-WAV.wav")
ReveilH = 17
ReveilM = 27
onoff = 1
i = 0
mafont=font.Font(family='Arial', size=20, weight='bold')
heure = Label(fenetre, text="Affichage de l'heure", width=10, height=2, font = mafont)
date = Label(fenetre, text= "Date",width=10, height=3)
ReveilHp = Label(fenetre, text=ReveilH, width=10, height=3)
ReveilMp = Label(fenetre, text=ReveilM, width=10, height=3)
def Horloge():
now = time.strftime("%H:%M\n"+"%S",time.localtime())
heure.config(text=now)
time.sleep(0.6)
heure.after(200,Horloge)
def Date():
nowD = time.strftime("%A %d\n%B\n%Y",time.localtime())
date.config(text=nowD)
time.sleep(50)
date.after(200,Date)
def Rchangement(event):
fenetreTopLevel=Toplevel(fenetre)
fenetreTopLevel.title('reglage')
buttonHeureUp = Button(fenetreTopLevel, text = "Hup",command = Hplus).pack()
buttonHeureDown = Button(fenetreTopLevel, text = "Hdown",command = Hmoin).pack()
buttonMinUp = Button(fenetreTopLevel, text =" Mup",command = Mplus).pack()
buttonMinDown = Button(fenetreTopLevel, text = "Mdown",command = Mmoin).pack()
def Hplus():
global ReveilH
Rplus = ReveilH = ReveilH + 1
ReveilHp.config(text=Rplus)
def Hmoin():
global ReveilH
Rmoin = ReveilH = ReveilH - 1
ReveilHp.config(text=Rmoin)
def Mplus():
global ReveilM
RMplus = ReveilM = ReveilM + 1
ReveilMp.config(text=RMplus)
def Mmoin():
global ReveilM
RMmoin = ReveilM = ReveilM - 1
ReveilMp.config(text=RMmoin)
def sonnerie():
while True:
a = time.localtime()
if(onoff == 1):
if(ReveilH == a[3]):
if(ReveilM == a[4]):
FinDeSonnerie()
time.sleep(60)
def FinDeSonnerie():
global i
i= i+1
son.play()
#allumer la lampe progressivement dans une autre Thread et lui dire de s arreter des minute apres
#while True:
#if(bouton droite == on):
#repetiton()
#if(bouton gauche == on):
#stop(stop musique)
def OnOff(event):
global onoff
onoff = onoff + 1
print(onoff)
textBouton.config(text=onoff)
def parametre():
global onoff
while True:
if(onoff == 2):
onoff = 0
textBouton = Label(fenetre, text=onoff)
textBouton.bind("<Button-1>", OnOff)
ReveilHp.bind("<Button-1>", Rchangement)
ReveilMp.bind("<Button-1>", Rchangement)
th1 = threading.Thread(target=Horloge)
th2 = threading.Thread(target=Date)
th3 = threading.Thread(target=sonnerie)
th4 = threading.Thread(target=parametre)
th1.start()
th2.start()
th3.start()
th4.start()
heure.pack()
date.pack()
ReveilHp.pack()
ReveilMp.pack()
textBouton.pack()
fenetre.mainloop()
Merci d' avance et mon but ultime et de le faire tourner sur mon raspberry pi (si il faut que je modifie quelque chose)
Les boucles while dans un code avec Tk (qui utilise une boucle événementielle donc boucle infinie) est une utilisation très complexe. Quand on utilise un framework graphique, la manière de penser change... Il faut voir cela comme des événements utilisateurs attendus ! La boucle événementielle attend que l'utilisateur agisse pour réagir.
Dans ton cas, tu interagis avec des temps, il existe une méthode pour cela, after.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonne journée...
Bonne journée...
Bonne journée...