Partage
  • Partager sur Facebook
  • Partager sur Twitter

python plante

    16 novembre 2018 à 21:03:28

    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)

    • Partager sur Facebook
    • Partager sur Twitter
      16 novembre 2018 à 21:39:22

      Ça se bloque chez moi aussi, donc ça doit venir du code.
      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2018 à 13:50:42

        Ok merci mais comment doit je faire pour savoir quoi modifier ???
        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2018 à 10:22:55

          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.

          • Partager sur Facebook
          • Partager sur Twitter

          Bonne journée...

            18 novembre 2018 à 10:28:54

            Il y a aussi une méthode update_gui pour rafraichir l'affichage, peut être utile dans ce cas.
            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2018 à 13:47:33

              sa ne marche toujours pas x) (mais sa reste un peu plus longtemps avant de buguer) mais je ne sait pas si j' ai bien utiliser la methode after

              mon nouveau 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 = 14
              ReveilM = 41
              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]):
                              if(i == 0):
                                  FinDeSonnerie()
                                  #time.sleep(60)
                  ReveilHp.after(200, sonnerie) ####ICI###
              
              def FinDeSonnerie():
              	global i
              	i = i+1
              	print(i)
              	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
              	ReveilMp.after(200, parametre)####ET ICI####
              
              	
              
              
              
              
              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()

              Et pour la methode update_gui est ce que je peut avoir un exemple car jai du mal a comprendre les code des forum anglais

              Merci d' avance

              -
              Edité par SophiJoue 18 novembre 2018 à 15:00:40

              • Partager sur Facebook
              • Partager sur Twitter
                18 novembre 2018 à 22:17:58

                Je l'utilise dans un de mes projets (fichier fstogedcom.py) :

                https://github.com/Linekio/getmyancestors

                • Partager sur Facebook
                • Partager sur Twitter
                  21 novembre 2018 à 20:44:13

                  sa ne marche toujours pas quel est le problème ???

                  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 = 15
                  ReveilM = 7
                  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 go():
                  	fenetre.update()
                  
                  def Horloge():
                      now = time.strftime("%H:%M\n"+"%S",time.localtime())
                      heure.config(text=now)
                      time.sleep(0.6)
                      go()		
                      heure.after(200,Horloge)
                  def Date():
                      nowD = time.strftime("%A %d\n%B\n%Y",time.localtime())
                      date.config(text=nowD)
                      time.sleep(50)
                      go()		
                      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)
                  	go()
                  
                  def Hmoin():
                  	global ReveilH
                  	Rmoin = ReveilH = ReveilH - 1
                  	ReveilHp.config(text=Rmoin)
                  	go()
                  
                  def Mplus():
                  	global ReveilM
                  	RMplus = ReveilM = ReveilM + 1
                  	ReveilMp.config(text=RMplus)
                  	go()
                  
                  def Mmoin():
                  	global ReveilM
                  	RMmoin = ReveilM = ReveilM - 1
                  	ReveilMp.config(text=RMmoin)
                  	go()
                  
                  
                  def sonnerie():
                      #while True:
                      a = time.localtime()
                      if(onoff == 1):
                          if(ReveilH == a[3]):
                              if(ReveilM == a[4]):
                                  if(i == 0):
                                      FinDeSonnerie()
                                      #time.sleep(60)
                      ReveilHp.after(10000, sonnerie)
                  
                  def FinDeSonnerie():
                  	global i
                  	i = i+1
                  	print(i)
                  	son.play()
                  	go()
                  		#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)
                  	go()
                  
                  	
                  def parametre():
                  	global onoff
                  	#while True:
                  	if(onoff == 2):
                  		onoff = 0
                  		go()
                  	ReveilMp.after(10000, parametre)
                  
                  	
                  
                  
                  
                  
                  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

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 novembre 2018 à 20:59:00

                    sleep est bloquant, à virer !

                    Après je ne sais pas s'il y a d'autres erreurs...

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Bonne journée...

                      22 novembre 2018 à 20:23:02

                      whaaaa ÉNORME merci a vous tous qui m' ont répondue car oui c' était effectivement le sleep qui merdait et juste wouaw

                      sa marche enfin et j’ai compris la logique de l' interface graphique

                      donc Grand merci a vous tous et a bientôt

                      -
                      Edité par SophiJoue 22 novembre 2018 à 20:24:48

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 novembre 2018 à 20:35:53

                        Tu peux mettre en résolu, merci ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Bonne journée...

                        python plante

                        × 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.
                        • Editeur
                        • Markdown