# -*- encoding:Utf8 -*-

# Version orientée objet d'un tracé de lignes dans un canevas

from tkinter import *
from random import randrange

class Application(Tk):

    # attribut de classe accessible par tous les objects de la classe Application
    palette = ['purple', 'cyan', 'maroon', 'green', 'red', 'blue', 'orange', 'yellow']
   
    def __init__(self):
        Tk.__init__(self)       # constructeur de la classe parente

        # coordonnées de la prochaine ligne:
        self.x1, self.y1, self.x2, self.y2 = 10, 190, 190, 10
        # couleur de la prochain ligne:
        self.coul = 'dark green'

        # création des widgets 'esclaves':
        # canevas:
        self.can = Canvas(master=self, bg='dark grey', height=200, width=200)
        self.can.pack(side=LEFT)
        # boutons:
        bou1 = Button(self, text='Quitter', command=self.quit)
        bou1.pack(side=BOTTOM)
        bou2 = Button(self, text='Tracer une ligne', command = self.drawline)
        bou2.pack()
        bou3 = Button(self, text='Autre couleur', command = self.changecolor)
        bou3.pack()

    # définitions des méthodes gestionnaires d'événements:

    def drawline(self):
        "Tracé d'une ligne dans le canevas self.can"
        
        self.can.create_line(self.x1, self.y1, self.x2, self.y2, fill=self.coul)
        # modification des coordonnées pour la ligne suivante:
        self.y1, self.y2 = self.y1-10, self.y2+10

    def changecolor(self):
        "Changement aléatoire de la couleur du tracé"

        c= randrange(8)     # => génère un nombre aléatoire de 0 à 7
        self.coul = Application.palette[c]
        

#------ Programme principal -------

fen = Application()                     # Création d'une instance de la classe Application

fen.mainloop()                          # Démarrage du réceptionnaire d'événements hérité de la classe parente

fen.destroy()                           # Destruction (fermeture) de la fenetre
