"Relancer" une command avec tkinter

Résolu
RomainG_ Messages postés 8 Statut Membre -  
RomainG_ Messages postés 8 Statut Membre -
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. trifou
     
    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
  2. RomainG_ Messages postés 8 Statut Membre
     
    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)
    0
    1. trifou
       
      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.
      0
  3. RomainG_ Messages postés 8 Statut Membre
     
    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()
    0
    1. trifou
       
      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.
      0
      1. RomainG_ Messages postés 8 Statut Membre > trifou
         
        Ok merci mais que mettre comme nom de variables ? J'avoue mettre une lettre car ceci est plus rapide
        0
      2. trifou > RomainG_ Messages postés 8 Statut Membre
         
        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 ?
        0
      3. RomainG_ Messages postés 8 Statut Membre > trifou
         
        Ok Ok merci
        0
    2. RomainG_ Messages postés 8 Statut Membre
       
      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()
      0