"Relancer" une command avec tkinter

Résolu
Bonjour, voici mon code :
Je souhaiterai que lorsque que le compte à rebours soit terminé, je puisse le relancer en appuyant sur le bouton "Lancer".
Merci d'avance pour votre aide.
from tkinter import *   
from time import gmtime, strftime, sleep
import time

f1 = Tk()
f1.title('Clean Feet')
f1.geometry('310x180')
f1.config(bg="red")

Label_h = Label(f1, font=('', 33, 'bold'))
Label_h.grid(row=0, column=0)
Label_h.config(bg="red")

Bouton1 = Button(f1, text = 'Quitter',font=('', 20,'bold'),fg=('red'), command = f1.destroy)
Bouton1.grid(row=1, column=0)

Label_car = Label(f1, font=('', 20, 'bold'),bg=('red'))
Label_car.grid(row=2, column=0)

a=16
so=0

def h():
Label_h.config(text=strftime('%H:%M:%S'))
Label_h.after(200, h)
global a
global so
if so != strftime('%S') and a>0 :
a=a-1
so=strftime('%S')
Label_car.config(text=a)
if a == 0 :
Label_car.config(text="STOP")

Bouton2 =Button(f1, text = 'Lancer', font=('', 20,'bold'),fg=('blue'), command =h)
Bouton2.grid(row=2, column=1)

h()
f1.mainloop()

3 réponses

  1. Bonjour,

    Relancer ton minuteur, c'est simplement réinitialiser la variable a et permettre de lancer le minuteur via le bouton.

    Exemple avec une variable tkinter.

    import tkinter as tk
    
    win = tk.Tk()
    
    def timer_start():
        timer_var.set(5)
        win.after(1000, timer_update)
        start_bt.config(state=tk.DISABLED)
    
    def timer_stop():
        start_bt.config(state=tk.NORMAL)
    
    def timer_update():
        if timer_var.get() > 0:
            timer_var.set(timer_var.get() - 1)
            win.after(1000, timer_update)
        else:
            timer_stop()
    
    timer_var = tk.IntVar(value=5)
    tk.Label(win, textvariable=timer_var).pack()
    start_bt = tk.Button(win, text='Lancer', font=('', 20,'bold'), fg=('blue'), command=timer_start)
    start_bt.pack()
    
    win.mainloop()
    1. Par exemple dans mon cas suis-je obligé de faire 3 variables comme tu l'a fais ou je refait juste une deuxième variables pour justement réinitialisée le compteur. (J'avoue avoir pas tout compris de ton programme)
      1. Bonjour,

        Il n'y a qu'une seule variable dans ce code, et c'est une variable tkinter qui possède les méthodes get et set, on agit que sur cette variable.

        Maintenant dans ton code, tu devrais à mon sens séparer ce qui concerne le minuteur et l'horloge dans des fonctions séparées.
    2. Merci j'ai réussi je me suis inspiré de ton programme :
      from tkinter import *			
      from time import gmtime, strftime, sleep
      import time

      f1 = Tk() #Initialisation de la fenêtre
      f1.title('Clean Feet') #Titre de la fenêtre
      f1.geometry('350x180') #Dimensions de la fenêtre
      f1.config(bg="yellow") #Couleur du fond

      Label_h = Label(f1, font=('', 33, 'bold')) #Création du Label h pour afficher l'heure
      Label_h.grid(row=0, column=0) #Placement du Label h dans la fenêtre
      Label_h.config(bg="yellow") #Couleur du fond du Label h

      Bouton1 = Button(f1, text = 'Quitter',font=('', 20,'bold'),fg=('red'), command = f1.destroy) #Création du bouton "Quitter", texte, taille, couleur du texte, ferme la fenêtre
      Bouton1.grid(row=1, column=0) #Placement du bouton "Quitter" dans la fenêtre

      Label_car = Label(f1, font=('', 20, 'bold'),bg=('yellow')) #Création du Label car pour afficher le compte à rebours
      Label_car.grid(row=2, column=0) #Placement du Label car dans la fenêtre

      a=0 #Initialisation de la variable "a" à 0
      so=0 #Initialisation de la variable "so" à 0

      def h():
      Label_h.config(text=strftime('%H:%M:%S')) #Configuartion de l'heure Heure Minute Seconde
      Label_h.after(200, h) #Actualiser l'heure toutes les 200ms
      global a
      global so
      global b
      if so != strftime('%S') and a>0 : #Si la variable "so" est différente à la valeur des Seconde et si a est supérieur à 0
      a=a-1
      so=strftime('%S')
      Label_car.config(text=a) #Affichage de la variable "a"
      if a == 0 : #Si la variable "a" est égale à 0
      Label_car.config(text="Mettez votre pied") #Alors affich de "Mettez votre pied"

      def g(): #Lorsque le bouton "Lancer" est appuyer alors :
      global a
      a=15 #On change la valeur de la variable "a" et on la met à 15
      Label_car.config(text=a) #Affichage de la variable "a"

      def p():
      global a
      a=0

      Bouton2 =Button(f1, text = 'Lancer', font=('', 20,'bold'),fg=('red'), command = g) #Création du bouton "Lancer", texte, taille, couleur du texte, éxecute "g"
      Bouton2.grid(row=2, column=1) #Placement du bouton "Lancer" dans la fenêtre

      Bouton3 =Button(f1, text = 'Mettre à 0', font=('', 15,'bold'),fg=('red'), command = p) #Création du bouton "Lancer", texte, taille, couleur du texte, éxecute "p"
      Bouton3.grid(row=1, column=1) #Placement du bouton "Mettre à 0" dans la fenêtre

      h()
      f1.mainloop()
      1. Bonjour,

        Lorsque tu postes du code, utilise les balises codes du forum afin de respecter l'indentation de ton code (tu peux éditer ton message pour ce faire).

        Sinon, prends l'habitude de nommer explicitement tes fonctions, p, g, h, ça ne va pas du tout, même chose pour tes variables, a, b, so, ça passe pour des variables locales, mais certainement pas pour des variables globales.
      2. from tkinter import *			
        from time import gmtime, strftime, sleep
        import time
        import tkinter.font as tkFont
        
        f1 = Tk()                                                                                       #Initialisation de la fenêtre
        f1.title('Clean Feet')                                                                          #Titre de la fenêtre
        f1.geometry('350x180')                                                                          #Dimensions de la fenêtre
        f1.config(bg="yellow")                                                                          #Couleur du fond
        
        Label_h = Label(f1, font=('', 33, 'bold',))                                                     #Création du Label h pour afficher l'heure
        Label_h.grid(row=0, column=0)                                                                   #Placement du Label "h" dans la fenêtre
        Label_h.config(bg="yellow")                                                                     #Couleur du fond du Label "h"
        
        Bouton1 = Button(f1, text = 'Quitter',font=('', 20,'bold'),fg=('red'), command = f1.destroy)    #Création du bouton  "Quitter",  texte, taille, couleur du texte, ferme la fenêtre
        Bouton1.grid(row=1, column=0)                                                                   #Placement du bouton "Quitter" dans la fenêtre
        
        Label_car = Label(f1, font=('', 20, 'bold'),bg=('yellow'))                                      #Création du Label "car" pour afficher le compte à rebours
        Label_car.grid(row=2, column=0)                                                                 #Placement du Label "car" dans la fenêtre
        
        a=0                                                                                             #Initialisation de la variable "a" à 0
        so=0                                                                                            #Initialisation de la variable "so" à 0
        
        def h():    
                Label_h.config(text=strftime('%H:%M:%S'))                                               #Configuartion de l'heure Heure Minute Seconde
                Label_h.after(200, h)                                                                   #Actualiser l'heure toutes les 200ms
                global a    
                global so
                global b
                if so != strftime('%S') and a>0 :                                                       #Si la variable "so" est différente à la valeur des Seconde et si a est supérieur à 0
                        a=a-1   
                        so=strftime('%S')
                Label_car.config(text=a)                                                                #Affichage de la variable "a"gfttt
                if a == 0 :                                                                             #Si la variable "a" est égale à 0 
                        Label_car.config(text="Mettez votre pied")                                      #Alors affichage de "Mettez votre pied"
                        f1.geometry('350x180')                                                          #Changement de la taille de la fenêtre
        
        def g():                                                                                        #Lorsque le bouton "Lancer" est appuyer alors :
                global a
                a=16                                                                                    #On change la valeur de la variable "a" et on la met à 15
                Label_car.config(text=a)                                                                #Affichage de la variable "a"
                f1.geometry('300x180')                                                                  #Changement de la taille de la fenêtre
        
        def p():                                                                                        #Lorsque le bouton "Mettre à 0" est appuyer alors :
                global a
                a=0                                                                                     #On met "a" à 0 pour que le compte à rebours recommence 
                f1.geometry('350x180')                                                                  #Changement de la taille de la fenêtre
                
        Bouton2 =Button(f1, text = 'Lancer', font=('', 20,'bold'),fg=('red'), command = g)              #Création du bouton "Lancer", texte, taille, couleur du texte, éxecute "g"
        Bouton2.grid(row=2, column=1)                                                                   #Placement du bouton "Lancer" dans la fenêtre
        
        Bouton3 =Button(f1, text = 'Mettre à 0', font=('', 15,'bold'),fg=('red'), command = p)          #Création du bouton "Lancer", texte, taille, couleur du texte, éxecute "p"
        Bouton3.grid(row=1, column=1)                                                                   #Placement du bouton "Mettre à 0" dans la fenêtre
        
        h()
        f1.mainloop()
      3. @trifouOk merci mais que mettre comme nom de variables ? J'avoue mettre une lettre car ceci est plus rapide
      4. @RomainG_Parfois, il est difficile de trouver un nom adéquat, les questions à se poser est :
        • Que représente cette variable ?
        • Que fait exactement cette fonction ?


        a
        dans ton code représente quoi ? Un compteur ? Un chronomètre ? Autre chose ?