##----- Importation des Modules -----##
from tkinter import *
##-----Définition des Variables globales-----##
x0, y0 = 150, 150 # Coordonnées initiales du centre du disque
x1, y1 = x0, y0 # Coordonnées actuelle du centre du disque
##----- Définition des Fonctions -----##
def avance(dx, dy):
"""Cette fonction redéfinit les coordonnées du
centre du disque pour simuler un déplacement."""
global x1, y1, cercle
x1, y1 = x1+dx, y1+dy
dessin.coords(cercle, x1-15, y1-15, x1+15, y1+15)
def depl_gauche():
"""Cette fonction "déplace" le centre du disque
de 10 pixels vers la gauche."""
avance(-10, 0)
def depl_droite():
"""Cette fonction "déplace" le centre du disque
de 10 pixels vers la droite."""
avance(10, 0)
def depl_haut():
"""Cette fonction "déplace" le centre du disque
de 10 pixels vers le haut."""
avance(0, -10)
def depl_bas():
"""Cette fonction "déplace" le centre du disque
de 10 pixels vers le bas."""
avance(0, 10)
def reinit():
"""Cette fonction ré-initialise l'interface graphique."""
global x1, y1, cercle
x1, y1 = x0, y0
dessin.coords(cercle, x1-15, y1-15, x1+15, y1+15)
def pointeur(event):
"""Cette fonction "déplace" le centre du disque selon
la position du clic de souris autour de lui."""
abscisse = event.x
ordonnee = event.y
k = -abscisse+x1+y1 # Equation de la 1ere bissectrice
p = abscisse-x1+y1 # Equation de la 2nde bissectrice
if (ordonnee < k) and (ordonnee < p):
depl_haut()
elif (ordonnee >= k) and (ordonnee >= p):
depl_bas()
elif (ordonnee <= k) and (ordonnee >= p):
depl_gauche()
else:
depl_droite()
##----- Création de la fenêtre -----##
fen = Tk()
fen.title('Animer un cercle')
##----- Création des boutons -----##
bouton_haut = Button(fen, text='Haut', width=10, command=depl_haut)
bouton_haut.grid(row = 1, column = 0, columnspan=2, padx=3, pady=3)
bouton_bas = Button(fen, text='Bas', width=10, command=depl_bas)
bouton_bas.grid(row = 3, column = 0, columnspan=2, padx=3, pady=3)
bouton_gauche = Button(fen, text='Gauche', width=10, command=depl_gauche)
bouton_gauche.grid(row = 2, column = 0, padx=3, pady=3)
bouton_droit = Button(fen, text='Droite', width=10, command=depl_droite)
bouton_droit.grid(row = 2, column = 1,padx=3, pady=3)
bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
bouton_quitter.grid(row = 3, column = 2, sticky=S+W+E, padx=25, pady=5)
bouton_reload = Button(fen, text='Recommencer', width=12, command=reinit)
bouton_reload.grid(row = 2, column = 2, padx=25, pady=5)
##----- Création du canevas -----##
dessin=Canvas(fen, bg='white', width=300, height=300)
dessin.grid(row = 0, column = 0, columnspan = 3, padx=5, pady=5)
##----- Programme principal -----##
cercle = dessin.create_oval(x1-15, y1-15, x1+15, y1+15, width=2, fill='red')
dessin.bind('<Button-1>', pointeur)
fen.mainloop() # Boucle d'attente des événements