"Relancer" une command avec tkinter

Résolu/Fermé
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020 - Modifié le 4 févr. 2020 à 19:08
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020 - 7 févr. 2020 à 12:44
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

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
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020
5 févr. 2020 à 20:43
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
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
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020
6 févr. 2020 à 12:24
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
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
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020 > trifou
6 févr. 2020 à 18:32
Ok merci mais que mettre comme nom de variables ? J'avoue mettre une lettre car ceci est plus rapide
0
trifou > RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020
Modifié le 6 févr. 2020 à 19:02
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
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020 > trifou
7 févr. 2020 à 12:44
Ok Ok merci
0
RomainG_ Messages postés 8 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 8 février 2020
Modifié le 6 févr. 2020 à 18:30
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