Partage
  • Partager sur Facebook
  • Partager sur Twitter

sortir de cette "boucle" créée par une fonction

    1 août 2021 à 0:16:26

    Bonjour,

    J'aimerai savoir comment je pourrai faire pour que quand la variable "sec" arrive à 0, elle ne continue pas à descendre dans les négatifs, donc à l'arrêter puis sortir de cette "boucle" que j'ai créé.

    sec = 11
    
    
    def timer():
        global sec
        bouton_commencer.destroy()
        sec -=1
        time['text'] = "temps restant:", sec
        time.after(1000, timer)

    si vous voulez le programme en entier, je peux vous le passer sans problème,

    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2021 à 2:44:19

      D'abord, c'est une très mauvaise idée que d'appeler ta variable "set". C'est un type en Python.
      On peut se passer du global dans la fonction si tu passes ta variable en paramêtre.
      Tu n'as pas de boucle dans ta fonction.
      while variable > 0:
          # le code à exécuter.
          variable -= 1
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        1 août 2021 à 8:08:45

        Bonjour,

        @PierrotLeFou : Il n'a pas appelé set sa variable mais sec et il s'agit manifestement d'un code tkinter. :-°

        @SnowSquirrelz:

        On met fin au callback avec  after_cancel():

        Exemple de mise en oeuvre:

        import tkinter
        root = tkinter.Tk()
        label = tkinter.Label()
        label.grid()
         
        def timer(sec, t=None):
            label['text'] = f"temps restant:{sec}"
            sec -=1
            t = root.after(1000, timer, sec, t)
            if sec == -1:
                root.after_cancel(t)
            
        timer(sec=10)



        • Partager sur Facebook
        • Partager sur Twitter
        • J'aime les bananes, le python, le gnu, le pingouin.
          • Vive le libre !
          1 août 2021 à 12:17:53

          ou on pense "récursif" et on teste avant d'appeler:

          import tkinter
          root = tkinter.Tk()
          label = tkinter.Label()
          label.grid()
            
          def timer(sec=10):
              label['text'] = f"temps restant:{sec}"
              if sec > 0:
                 root.after(1000, timer, sec - 1)
          
          timer()
          root.mainloop()

          Mais after_cancel et la récupération de l'identifiant retourné par after est à connaître pour arrêter le décompte avant la fin.

          -
          Edité par mps 1 août 2021 à 12:18:25

          • Partager sur Facebook
          • Partager sur Twitter

          sortir de cette "boucle" créée par une fonction

          × 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