Voici mon approche minimaliste de ce problème (bien, pas tout à fait, je ne jette dans quelques raffinements):
from turtle import Turtle, Screen
FONT_SIZE = 24
FONT = ('Arial', FONT_SIZE, 'normal')
def turtle_drag(turtle, other, x, y):
turtle.ondrag(None) # disable event hander in event hander
turtle.goto(x, y)
display.undo() # erase previous distance
distance = turtle.distance(other)
display.write('Distance: {:.1f}'.format(distance), align='center', font=FONT)
turtle.setheading(turtle.towards(other)) # make them always look
other.setheading(other.towards(turtle)) # lovingly at each other
turtle.ondrag(lambda x, y: turtle_drag(turtle, other, x, y)) # reenable
screen = Screen()
screen.setup(500, 500)
display = Turtle(visible=False)
display.penup()
display.goto(0, screen.window_height()/2 - FONT_SIZE * 2)
display.write('', align='center', font=FONT) # garbage for initial .undo()
Alex = Turtle('turtle')
Alex.speed('fastest')
Alex.color('blue')
Alex.penup()
Alice = Turtle('turtle')
Alice.speed('fastest')
Alice.color('red')
Alice.penup()
turtle_drag(Alex, Alice, -50, -50) # initialize position and event hander
turtle_drag(Alice, Alex, 50, 50)
screen.mainloop()
Lorsque vous faites glisser Alex ou Alice, leur distance centre-centre en haut de l'écran est mise à jour. Celui-ci utilise une tortue fixe, invisible, séparée, qui manipule l'affichage et qui fait .undo()
pour effacer une valeur précédente et .write()
pour en afficher une nouvelle. Faire les tortues se tournent vers l'autre après l'affichage à distance est mis à jour assure qu'ils ne sont pas piégés sous la tortue d'affichage invisible (c.-à-undragable) afin qu'ils puissent même être postitioned au-dessus du texte:
Bienvenue empiler le débordement. Qu'avez-vous déjà essayé de faire cela? Veuillez consulter [Combien d'effort de recherche est attendu?] (Https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users). Stack Overflow n'est pas un service de codage. Vous devez rechercher votre problème et tenter d'écrire le code vous-même avant de le publier. Si vous êtes bloqué sur quelque chose de spécifique, revenez et incluez un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) et un résumé de ce que vous avez essayé, afin que nous puissions vous aider. – Sand