#---------------------------------------------------------------------
# Esempio metodo after per avviare ciclicamente
# una funzione realizzando un'animazione
#---------------------------------------------------------------------

try: import Tkinter as tk                   # Py2
except ImportError: import tkinter as tk    # Py3

import math

XS, YS = 150, 100     # coordinate X e Y del sole
SR, PR = 13, 3        # raggi del sole e del pianeta
G = 500.0             # forza di attrazione
xp, yp = 150.0, 30.0  # coordinate iniziali del pianeta
vx, vy = 2.5, -0.8    # velocita' iniziali del pianeta

#---------------------------------------------------------------------

def elabora():
    global xp, yp, vx, vy
    form1.after(40, elabora)
    dx = XS - xp
    dy = YS - yp
    d = math.hypot(dx, dy)
    f = G / (d*d)
    vx += f * (dx / d)
    vy += f * (dy / d)
    xp += vx
    yp += vy
    canv1.coords(pianeta, xp-PR, yp-PR, xp+PR, yp+PR)

#---------------------------------------------------------------------

form1 = tk.Tk()
form1.resizable(False, False)
canv1 = tk.Canvas(
    form1, width=300, height=200, bg="black", highlightthickness=0)
canv1.create_oval(XS-SR, YS-SR, XS+SR, YS+SR, fill="yellow")
pianeta = canv1.create_oval(xp-PR, yp-PR, xp+PR, yp+PR, fill="green")
canv1.pack()
elabora()
form1.mainloop()