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
|
from tkinter import*
def cercle(can,x,y,r,coul) :
"dessin d'un cercle de rayon r en (x,y) dans le canevas can"
can.create_oval(x-r,y-r,x+r,y+r,fill=coul)
class Application(Tk) :
def __init__(self) :
Tk.__init__(self) # constructeur de la classe parente
self.can = Canvas(self,width=475,height=130,bg='white')
self.can.pack(side=TOP,padx=5,pady=5)
Button(self,text="Train",command=self.dessine).pack(side=LEFT)
Button(self,text='Hello',command=self.coucou).pack(side=LEFT)
Button(self,text="Allumer",command=self.lumiere).pack(side=LEFT)
def dessine(self) :
"instanciation de 4 wagons dans le canevas"
self.w1 = Wagon(self.can,10,30,'light salmon')
self.w2 = Wagon(self.can,130,30,'SlateBlue1')
self.w3 = Wagon(self.can,250,30,'pale green')
self.w4 = Wagon(self.can,370,30,'DarkGoldenrod3')
def coucou(self) :
"apparition de personnages dans certaines fenêtres"
self.w1.perso(3) # 1er wagon, 3ème fenêtre
self.w3.perso(1) # 3ème wagon, 1ère fenêtre
self.w3.perso(2) # 3ème wagon, 2ème fenêtre
self.w4.perso(1) # 4ème wagon, 1ère fenêtre
def lumiere(self) :
"lumière !"
self.w1.allumer()
self.w3.allumer()
self.w4.allumer()
class Wagon(object) :
def __init__(self,canev,x,y,couleur) :
"dessin d'un petit wagon en (x,y) dans le canevas 'canev'"
# mémorisation des paramètres dans des variables d'instance :
self.canev,self.x,self.y,self.couleur = canev,x,y,couleur
# rectangle de base : 95 x 60 pixels :
canev.create_rectangle(x,y,x+95,y+60,fill = couleur)
# 3 fenêtres de 25x40 pixels, écartées de 5 pixels :
self.fen = []
for xf in range(x+5,x+90,30) :
self.fen.append(canev.create_rectangle(xf,y+5,xf+25,y+40,fill='black'))
cercle(canev,x+18,y+73,12,"grey56")
cercle(canev,x+77,y+73,12,"grey56")
def perso(self,fen) :
"apparition d'un petit personnage à la fenêtre 'fen'"
# calcul des coordonnées du centre de chaque fenêtre :
xf = self.x + fen*30 - 12
yf = self.y + 25
cercle(self.canev,xf,yf,10,'pink') # visage
cercle(self.canev,xf-5,yf-3,2,'black') # oeil gauche
cercle(self.canev,xf+5,yf-3,2,'black') # oeil droit
cercle(self.canev,xf,yf+5,3,'red') # bouche
def allumer(self) :
"""permet d'allumer la lumière dans les wagons, en teintant les fenêtres
en jaune"""
for fen in self.fen :
self.canev.itemconfigure(fen,fill='yellow')
app = Application()
app.mainloop() |
Partager