def _create_circle(self, x, y, r, **kwargs):
"""Create a circle
x the abscissa of centre
y the ordinate of centre
r the radius of circle
**kwargs optional arguments
return the drawing of a circle
"""
return self.create_oval(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle = _create_circle
def _coords_circle(self, target, x, y, r, **kwargs):
"""Define a circle
target the circle object
x the abscissa of centre
y the ordinate of centre
r the radius of circle
**kwargs optional arguments
return the circle drawing with updated coordinates
"""
return self.coords(target, x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.coords_circle = _coords_circle
def create(balls, canvas):
"""Create a drawing item for each solver.Ball object
balls the list of solver.Ball objects
canvas the Tkinter.Canvas oject
return a dictionary with solver.Ball objects as keys and their circle drawings as items
"""
return {ball: canvas.create_circle(ball.position[0], ball.position[1], ball.radius, fill="white") for ball in balls}
def update(drawing, canvas, step, size):
"""Update the drawing items for a time step
drawing the dictionary of drawing items
canvas the Tkinter.Canvas oject
step the time step
size the medium size
"""
balls = drawing.keys()
solver.solve_step(balls, step, size)
for ball in balls:
canvas.coords_circle(drawing[ball], ball.position[0], ball.position[1], ball.radius)
canvas.update()