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() |
Partager