from tkinter import *

# Classe fille de la classe Tk importée du module tkinter

class DemoCurseur(Tk):
    """ Utilisation d'un curseur"""

    def __init__(self):
        Tk.__init__(self)       
        self.title("Utilisation d'un curseur")

        # création du canevas:
        self.can = Canvas(self, bg = "white",
                          height = 270, width = 220)
        self.can.grid(row = 1, column = 1, columnspan = 2,
                      padx = 5, pady = 5)

        # création du cercle interne au canevas:
        self.cercle = self.can.create_oval(10, 10,
                                           20, 20, fill="red")

        # création du curseur:
        curseur = Scale(master=self, length = 200, from_ = 0,
                        to = 200, tickinterval = 50,
                        orient = HORIZONTAL, command = self.updateCircle)
        curseur.grid(row = 3, column =2, rowspan=2, padx=5, pady=5)
        curseur.set(10)    # valeur par défaut transmise au curseur

        # création des étiquettes de texte:
        Label(self, text="Couleur du cercle",
              font=("Comic Sans MS", 14, "bold"),
              fg='red').grid(row = 2, column = 1, padx = 2, pady = 2)
        Label(self, text="Taille diamètre",
              font=("Comic Sans MS", 14, "bold"),
              fg='red').grid(row = 2, column = 2, padx=2, pady=2)
        
        # variable mémorisant la couleur de la boule:
        self.couleur = StringVar()
        self.couleur.set('red')

        # création des boutons radio:
        Radiobutton(master=self, text='Rouge', bg='red',
                    variable=self.couleur, value='red',
                    width=10, command=self.changeColor).grid(row =3,column=1,
                                                             sticky=W, padx=5, pady=5)
    
        Radiobutton(master=self, text='Bleu', bg='blue',
                    variable=self.couleur, value='blue',
                    width=10, command=self.changeColor).grid(row =4, column=1,
                                                             sticky=W, padx=5, pady=5)
        
        
    # Gestionnaires d'événements:

    def updateCircle(self, val):
        """Redimensionne le cercle en fonction de la valeur transmise par le curseur"""
        fin = int(val) + 10
        self.can.coords(self.cercle, 10, 10, fin, fin)

    def changeColor(self):
        "Modifie la couleur de la boule"
        coul = self.couleur.get()
        self.can.itemconfigure(self.cercle, fill=coul)

############ Programme principal #########

DemoCurseur().mainloop()
