Problème de "trainée" lors du déplacement d'un objet tkinter

Fermé
Kindo - 18 juil. 2021 à 00:33
 Kindo - 19 juil. 2021 à 21:32
Bonsoir tout le monde,

Je rencontre un problème en programmant une animation toute simple sur Python. En effet, lorsque je déplace le cercle vers la gauche, celui-ci laisse une trainée rouge qui ne s'efface que si l'on revient dessus. C'est assez embêtant. Y'a-t-il une solution svp ?

from tkinter import *

x0,y0,x1,y1=(330,210,385,265)

# Mouvement
def right(event):
    dx=10
    dy=0
    cnv.move(cercle,dx,dy)
def left(event):
    dx=-10
    dy=0
    cnv.move(cercle,dx,dy)
def up(event):
    dx=0
    dy=-10
    cnv.move(cercle,dx,dy)
def down(event):
    dx=0
    dy=10
    cnv.move(cercle,dx,dy)


# Paramètres Fenêtre
root=Tk()
root.title('Animation')
root.geometry('800x600+120+20')
root.config(bg='grey')

# Caneva
cnv=Canvas(root,bg='lightgrey',width='700',height='450')
cnv.pack(pady=15)

# Cercle
cercle=cnv.create_oval(x0,y0,x1,y1,fill='red',width=2)

# Evenements
root.bind('<Right>', right)
root.bind('<Left>', left)
root.bind('<Up>', up)
root.bind('<Down>', down)

root.mainloop()

4 réponses

yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 Ambassadeur 1 552
18 juil. 2021 à 01:02
bonjour,
je ne vois aucune trainée quand je teste cela.
0
Ah bon, c'est bizarre... Pour ma part j'utilise EduPython. Vous pensez que le problème peut venir de ça ?

Je voulais joindre une capture d'écran mais les trainées n'apparaissent étrangement pas sur la photo...
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 1 552
18 juil. 2021 à 12:32
peut-être en changeant la couleur du cercle avant et après le mouvement?
0
Je viens d'essayer mais ça ne change pas grand chose à part la couleur des trainées qui varie en fonction de la couleur du cercle.

Je pense que le problème vient de l'IDE en lui-même puisque vous ne rencontrez pas ce problème lors de l'exécution du programme.
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 1 552
18 juil. 2021 à 20:04
je proposais, évidement, de changer la couleur du cercle, avant le mouvement, pour qu'il soit de la même couleur que l'arrière-plan.
afin que la trainée soit invisible.
0
Kindo > yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024
18 juil. 2021 à 22:32
Ah d'accord. Non malheureusement cela ne marche que lorsque l'arrière plan est noir. C'est donc assez limitant comme condition ...
0
Bonsoir,

Sans nul doute cela vient de ton environnement edupython.

Tente d'ajouter un
cnv.update_idletasks()
après la ligne des move dans tes fonctions, mais je ne pense pas que cela change vraiment le comportement bogué de ton IDE.

Sinon, tu peux tout simplement au lieu d'utiliser move, détruire le précédent cercle et en créer un nouveau.

from tkinter import *

# Mouvement
def right(event):
    coords[0] += 10
    coords[2] += 10
    circle_create()

def left(event):
    coords[0] -= 10
    coords[2] -= 10
    circle_create()

def up(event):
    coords[1] -= 10
    coords[3] -= 10
    circle_create()

def down(event):
    coords[1] += 10
    coords[3] += 10
    circle_create()

def circle_create():
    global cercle_id
    cnv.delete(cercle_id)
    cercle_id = cnv.create_oval(coords, fill='red', width=2)

# Paramètres Fenêtre
root = Tk()
root.title('Animation')
root.geometry('800x600+120+20')
root.config(bg='grey')

# Caneva
cnv = Canvas(root,bg='lightgrey',width='700',height='450')
cnv.pack(pady=15)

coords = [330,210,385,265]
# Cercle
cercle_id = 0
circle_create()

# Evenements
root.bind('<Right>', right)
root.bind('<Left>', left)
root.bind('<Up>', up)
root.bind('<Down>', down)

root.mainloop()
0
Bonsoir, merci pour votre réponse.

Je viens d'essayer les 2 solutions mais malheureusement le problème persiste toujours.

Je vais tenter de contacter EduPython pour leur faire part du problème et voir s'il y a une solution.
0