IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Comment ne pas répéter une même instruction lors d'un événement caneva.bind("<Motion>",) ? [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Comment ne pas répéter une même instruction lors d'un événement caneva.bind("<Motion>",) ?
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canevas.bind("<Motion>",check_mouse)
    Un code qui permet de créer une ligne rouge au même position que le trait bleu que la souris survole.
    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:
    Nom : im1.png
Affichages : 209
Taille : 27,0 Ko
    Bob est ajouté au réseau (network):
    Nom : im2.png
Affichages : 200
Taille : 30,8 Ko
    Alice et Bob sont amis, et la souris est sur le lien entre Alice et David:
    Nom : im3.png
Affichages : 194
Taille : 36,4 Ko
    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:
    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])
    Qui consiste donc à supprimé tout les éléments que le canevas n'est pas censé contenir (donc les lignes rouges en trop)
    Si quel qu'un qui connais bien Tkinter et pouvait m'aider avec mon code, je lui serai éternellement reconnaissant car 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

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Avez vous regardé l'option activefill de .create_line?
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import tkinter as tk
    >>> canvas = tk.Canvas()
    >>> canvas.pack()
    >>> iid = canvas.create_line(0,0, 200,200, activefill='red')
    Pour le reste, désolé, mais j'ai rien compris (ou plutôt vous mélangez tellement le "quoi" - dessiner un graphe - avec le "comment" (les items du canvas) que c'est pas facile.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Avez vous regardé l'option activefill de .create_line?
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import tkinter as tk
    >>> canvas = tk.Canvas()
    >>> canvas.pack()
    >>> iid = canvas.create_line(0,0, 200,200, activefill='red')
    Pour le reste, désolé, mais j'ai rien compris (ou plutôt vous mélangez tellement le "quoi" - dessiner un graphe - avec le "comment" (les items du canvas) que c'est pas facile.

    - W
    Ca marche nickel! Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment modifier par programmation une form crée lors de l'execution
    Par Fab.asia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/07/2007, 14h47
  2. Comment ne pas utiliser une #table
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/06/2007, 15h19
  3. [SQL] Comment ne pas exécuter une clause WHERE si une var est nulle
    Par charlysquare dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/05/2006, 21h12
  4. Ne pas répéter une image de fond
    Par valette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/01/2005, 21h49
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo