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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #!/usr/local/bin/python
# -*- coding:utf-8 -*-
from Tkinter import *
import threading
import time
from math import *
class ObjetTournant(threading.Thread):
def __init__(self, x, y, dans_canvas, ray, couleur):
threading.Thread.__init__(self)
self.rayon = ray
self.x0 = x
self.y0 = y
self.coul = couleur
self.angle = 0
self.c = dans_canvas
self.Fini = False
self.ref = self.c.create_line(self.x0, self.y0, self.x0+self.rayon, self.y0, width = 8, fill=self.coul)
def run(self):
while not self.Fini:
new_x = self.x0 + int(self.rayon * sin (radians(self.angle)))
new_y = self.y0 + int(self.rayon * cos (radians(self.angle)))
self.c.coords(self.ref, self.x0, self.y0, int(new_x), int(new_y))
self.angle += 1
if self.angle >= 360:
self.angle = 0
time.sleep(0.01)
print "Le thread ",self.coul," est fini."
def stop(self):
self.Fini = True
class Application:
def __init__(self):
self.root=Tk()
self.root.title('Objets tournants avec threads - v02')
self.root.geometry('700x400')
self.root.protocol("WM_DELETE_WINDOW", self.finirapplication)
self.ca = Canvas(self.root, bg="white")
self.ca.pack(side=LEFT, expand=YES, fill=BOTH)
self.listeDesObjetsTournant = []
self.listeDesObjetsTournant.append(ObjetTournant(100,200,self.ca, 50, "red"))
self.listeDesObjetsTournant.append(ObjetTournant(500,100,self.ca, 30, "green"))
self.listeDesObjetsTournant.append(ObjetTournant(340,200,self.ca, 40, "blue"))
self.listeDesObjetsTournant.append(ObjetTournant(200,100,self.ca, 80, "black"))
self.fra = Frame(self.root)
t = 0
for i in self.listeDesObjetsTournant:
but1 = Button(self.fra, text="Start "+str(t), command=lambda m=i:self.objetdemarrer(m))
but1.grid(row=t,column=0)
but2 = Button(self.fra, text="Stop "+str(t), command=lambda m=i:self.objetstop(m))
but2.grid(row=t,column=1)
t += 1
self.fra.pack(side=RIGHT)
self.root.mainloop()
def finirapplication(self):
for obj in self.listeDesObjetsTournant:
#obj.Fini = True
obj.stop()
sys.exit()
def objetdemarrer(self, m):
m.Fini = False
m.start()
def objetstop(self, m):
m.stop()
if __name__ == "__main__":
app = Application() |
Partager