Dans la fonction start du programme suivant je crée une variable time.time() que j'ai besoin de transmettre à la fonction stop
Mais ces 2 fonctions sont lancées par un clic sur un bouton : <command = self.start> <command = self.stop>
Ces 2 commandes n'ont pas la possibilité de transmettre des variables
J'ai donc trouvé une solution qui n'est pas satisfaisante, je déclare dans fonction start :< self.debut = time.time>
que je peux utiliser dans la fonction stop
self.debut n'est même pas déclaré dans <créer_données> et bizarrement cela fonctionne
pouvez vous me conseiller une solution correcte
voici le programme :
je vous remercie de votre réponse

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
from tkinter import *
import tkinter as tk
from random import randrange
import time
 
class Application(Tk) :    # on peut aussi utiliser <tk.Tk>     
    def __init__(self,x=20, y=20, r=5) :
        Tk.__init__(self)
        self.x = x
        self.y = y
        self.r = r        
        self.creer_donnees()
        self.creer_widgets()
 
    def creer_donnees(self ) :        
        self.delai =0.01
        self.flag = 0  #initialisé à arrêt
        self.cr = 0        
 
    def creer_widgets(self) :
        self.can = Canvas(self, height = 200, width = 750, bg = 'green')
        self.can.grid(row = 0,column = 0)
        self.balle = self.can.create_oval(self.x-self.r,self.y-self.r, self.x+self.r,
                                          self.y+self.r, fill  = 'red')
            #self.start sans () attend l'évènement et non self.start() qui lance la fonction
            #self.start ne peut comporter de paramètres d'ou la création de <start> qui lance <depl>
        self.bt = Button(self, text = 'start', bg = 'yellow', command = self.start)
        self.bt.grid(row =1, column = 0)
        self.bt1 = Button(self, text = 'Pause',  bg = 'light green', command = self.stop)
        self.bt1.grid(row =1, column = 1)
 
    def depl(self,x,y,r,cr) : #x,y,r sont alors dissociées des valeurs initiales
        x= x+1             #on peut les faire évoluer
        y =y +0.25      
        self.can.coords(self.balle,(x-r),(y-r),(x+r), (y+r))        
        self.can.update()    # instruction nécessaire pour mettre à jour can et donc l'avancement     
        if self.flag >0 :
            cr+=1
            time.sleep(self.delai)  #utilisation de sleep car self.after ne fonctionne pas
                                    #self.after(self.delai, self.depl(x,y,r))
            #arguments passés sans self deviennent des variables de méthodes modifiables        
            self.depl(x,y,r,cr)
 
    def start(self) :   # appelle les variables de classe
        self.flag = 1     #marche
        """on définit ici <self.debut> permet d'être transmis à  <stop>"""
        self.debut = time.time() 
        self.depl(self.x,self.y,self.r, self.cr)  # et les transmets à self.depl
 
    def stop(self) :        
        self.flag = 0
        fin = time.time()        
        elapsed = fin - self.debut
        elap = round(elapsed,2)
        print('C/ Temps d\'exécution :',elap, 'sec')
 
if __name__ ==  '__main__' :  
    app = Application(0,10,12)   # instanciation de l'objet Application
    app.geometry('800x250')  
    app.mainloop()