Bonsoir tout le monde
Désolé de vous déranger je suis tout tout nouveau sur Tkinter et je galère énormément à l'utiliser :/
Je vous explique mon problème:
Supposons que j'ai 2 personnes (représentés) par des carrées sur le canevas, lorsque je clique sur une personne et que je relâche la souris sur une autre, une ligne bleue se créer entre les 2 (pour symbolisé qu'ils sont amis).
Je voudrai que quand la souris passe sur ce segment le segment devienne rouge.
MAIS des personnes peuvent s'ajouter (changeant donc les positions du trait, mais ça pas de problème je stocke les infos x1,y1,x2y2 dans une liste de tuples) et donc des nouveaux liens peuvent se créer. Donc on peut pas trop (en tout cas je suppose facilement) modifier la ligne dessiné dans le canevas.
Du coup pour vérifier j'ai mis dans l'événement:
Un code qui permet de créer une ligne rouge au même position que le trait bleu que la souris survole.
Code : Sélectionner tout - Visualiser dans une fenêtre à part canevas.bind("<Motion>",check_mouse)
MAIS le problème c'est que du coup: tant que la souris bouge sur le trait, elle créera une ligne rouge. Hors je veux que si la souris sorte du trait la/les ligne rouge disparaisse (sans redessiné par dessus une ligne bleue pour ne pas surchargé le canevas).
Avec des images:
Alice et David sont amis:
Bob est ajouté au réseau (network):
Alice et Bob sont amis, et la souris est sur le lien entre Alice et David:
Donc voila je voudrai vos propositions sur la questions (sans variables globales si possible)désolé s'il y a une fonction hyper simple pour résoudre cela je découvre Tkinter que depuis 3 jours :/
La "solution" que j'avais trouvé mais qui n'est absolument pas efficace et fait quelques erreurs visuels et:
Qui consiste donc à supprimé tout les éléments que le canevas n'est pas censé contenir (donc les lignes rouges en trop)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 objet_canevas = len(network)*2 + len(pos_liens_ami) + 1 while len(canevas.find_all()) > objet_canevas+1: canevas.delete(canevas.find_all()[-1]) if not touching_line and len(canevas.find_all()) > objet_canevas: canevas.delete(canevas.find_all()[-1])
Si quel qu'un qui connais bien Tkinter et pouvait m'aider avec mon code, je lui serai éternellement reconnaissantcar je suis sure que je peux amélioré énormément et que c'est rempli d'erreurs :s
Merci d'avance de vos réponses![]()
Partager