from tkinter import *

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

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

    def __init__(self):
        """ Création d'un canevas avec un cercle contrôlé par un curseur """
        Tk.__init__(self)       # constructeur de la classe parente
        self.title("Utilisation d'un curseur")

        # création du canevas:
        self.can = Canvas(self, bg = "white", height = 270, width = 220)
        self.can.pack(side = TOP, 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, from_ = 0, to = 200,
                        orient = HORIZONTAL,
                        command = self.updateCircle)
        curseur.pack(side = BOTTOM)
        curseur.set(10)    # valeur par défaut transmise au curseur

        # variable mémorisant la couleur de la boule:
        self.couleur = StringVar()
        self.couleur.set('red') # initialisation de la valeur de l'objet-variable

        # création des boutons radio:
        bou1 = Radiobutton(master=self,
                           text='Rouge',
                           variable=self.couleur,
                           value='red',
                           command=self.changeColor)
        bou1.pack(side = LEFT)

        bou2 = Radiobutton(master=self,
                           text='Bleu',
                           variable=self.couleur,
                           value='blue',
                           command=self.changeColor)
        bou2.pack(side = RIGHT)
        
        
    # 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 #########

fen = DemoCurseur()
fen.mainloop()
