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