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 :

[Tkinter] sélection d'objet pour déplacement


Sujet :

Tkinter Python

  1. #1
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut [Tkinter] sélection d'objet pour déplacement


    Je craque, ca fait prés d'un mois que je me casse la tete sur ce problème et rien n'y fait.

    imaginez, un canvas dans lequel je met une image, puis par dessus une autre image qui recouvre la première totalement.
    je conserve les refs canvas, dans des listes distinctes.

    La particularité de la 2eme image est quel a une partie transparente, qui laisse entrevoir l'image du dessous.

    J'ai mis en place une fonction pour déplacer les éléments dans le canvas.

    elle fonctionne c'est sur.

    j'aimerai arrivé a pouvoir déplacer l'image du dessous sans toucher a l'image du dessus. Le prob est que canvas.find-closest() sélectionne l'objet le plus proche du clic souris. L'image2 est systématiquement sélectionnée car la zone transparent reste comme faisant partie de l'image 2.

    Suis je assez clair!?

    j'ai bien essayé un condition du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    def mousedown(self,event):
            self.x,self.y=event.x,event.y
            
            self.canvas.configure(cursor='draft_small')
            self.Object=self.canvas.find_closest(self.x,self.y,halo=15)
            self.ID=self.Object
            print self.Object
                
            if self.ID[0]==self.coord_image[4]:
                pass
                
    
            elif self.ID[0]==self.coord_frame[4]:
                self.Object=(self.coord_image[4])
                self.ID=self.Object
                print self.Object,self.coord_image[4],self.ID[0]
            
            else:
                self.canvas.itemconfigure(self.Object,width=2)
                self.canvas.lift(self.Object)
    Rien n'y fait, je comprend pas. j'ai fait une variante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    elif self.ID[0]==self.coord_frame[4]:
                self.Object=self.c_image
                self.ID=self.Object
                print self.Object
    mais toujours rien.....

    qqu'un pour m'aider. J'ai bien une solution pour contourner le problème, mais ca n'avance a rien de contourner un prob. Je préfère le résoudre.... Peut être avec un cours Python ?

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    salut,

    je ne sais pas si j'ai tout compris mais j'essaye quand meme, de plus je ne sais pas trop a quoi correspond tes images donc je te propose un truc c'est peut etre la meme chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    # en supposant que tu ai créé tes images comme ca : 
    image1 = self.canvas.create_image(...) #image du dessous
    image2 = self.canvas.create_image(...) #image du dessus transparente
    puis quand tu cliques...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    self.Object = self.canvas.find_closest(...)
     
    # il selectionne toujours l'image 2 mais on sait jamais :)
    if self.Object[0] == image2:
       self.Object[0] = image1
     
    # apres tu t'amuse avec ton self.Object[0]
    Pour apprendre Python suis ces cours et tutoriels Python : http://python.developpez.com/cours/
    Le meilleur livre Python : Apprendre à programmer avec Python 3 par Gérard Swinnen http://python.developpez.com/cours/apprendre-python3/

    voilà et si ca sert à rien tant pis

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par airod
    self.Object=self.canvas.find_closest(self.x,self.y,halo=15)
    A quoi correspond le paramètre halo? (dans la doc que j'ai trouvé il n'y a que 2 paramètres à la fonction find_closest)

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    find_closest(x, y, halo, start) => item

    -Retourne l’handle de l’item le plus proche du point (x,y). Seul le premier trouvé dans la liste d’affichage sera traité. Utiliser l’argument halo pour augmenter ou diminuer la sensibilité. L’argument start indique l’item à partir duquel doit se faire le traitement (par défaut toute la liste d’affichage).


    (j'ai trouvé ca dans mon cours de python en fait...lol )

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    D'ailleurs je viens de voir la fonction :

    find_below(item) => item
    -Retourne l’handle de l’item sous l’item indiqué


    ca peut peut etre t'aider airod

  6. #6
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    je vais jeter un coup d'oeil la dessus.

    merci de l'aide.

  7. #7
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Trop de la balle.....
    ca faisait Un mois que je cherchais, alors que la solution est dans mon manuel de tkinter (mais mon anglais est pas bon... ceci explique cela!)

    merci beaucoup pour ce coup de pouce......



    en fait il faut que je fasse deux c.find_below(item) coup sur coup, pour atteindre mon image, parceque en fait j'ai 3 images (j'en avais oublié une!)
    mouarf!

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    Sinon tu peux utiliser find_overlapping(x1, y1, x2, y2) qui, d'après ce que j'ai compris, te renvoie tous les handles des items compris dans le rectangle indiqué (dans un tuple), si tu connais la position de celui-que tu souhaites récupérer ça peut être interressant (bien que je ne suis pas sur qu'il te les renvoie du plus proche au plus éloigné => à vérifier).
    Il y a donc plusieurs moyens de récupérer cet item, la bonne solution dépend de ce que tu veux faire exactement ...

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

Discussions similaires

  1. [Batch] Sélection précise de fichier pour déplacement
    Par Promethe69 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/02/2015, 16h55
  2. Sélection d'objets pour un logiciel de type AutoCAD
    Par loran4444 dans le forum C++Builder
    Réponses: 15
    Dernier message: 09/03/2005, 19h23
  3. Utilisation d'objets pour imprimer
    Par alainvh dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/12/2004, 10h25
  4. [Souris] Sélection d'objets visuels
    Par AlDel dans le forum Composants VCL
    Réponses: 8
    Dernier message: 09/09/2004, 13h27
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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