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

Python Discussion :

glisser déposer TKinter


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2023
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2023
    Messages : 25
    Par défaut glisser déposer TKinter
    Bonjour, je suis en train de créer un jeu d'échecs avec des pièce qui se déplacent par glisser déposer. j'ai suivi de nombreux tutoriels afin de comprendre comment ça marche et j'ai donc réussi a écrire cela:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    label = Label(fenetre, text="")
    label.pack(anchor="nw")
     
    class DragManager():
        def add_dragable(self, widget):
            c_echecs.tag_bind(widget, "<ButtonPress-1>", self.on_start)
            c_echecs.tag_bind(widget, "<B1-Motion>", self.on_drag)
            c_echecs.tag_bind(widget, "<ButtonRelease-1>", self.on_drop)
     
        def on_start(self, event):
            c_echecs.configure(cursor="hand2")
            pass
     
        def on_drag(self, event):
            global dame_n1
            pion_n1, cava_n1, fou_n1, tour_n1, dame_n1, roi_n1, pion_b1, cava_b1, fou_b1, tour_b1, dame_b1, roi_b1 = importation_pionsV1()
            img = c_echecs.create_image(event.x, event.y, image=dame_n1)
     
            label.config(text="x:" + str(event.x) + "y:" + str(event.y))
            pass
     
        def on_drop(self, event):
            c_echecs.configure(cursor="")
            for lig in range(8):
                for col in range(8):
                    if (lig*80) <= event.y <= ((lig+1)*80) and 40+(col*80) <= event.x <= 40+((col+1)*80):
                        d_n = c_echecs.create_image(80+(col*80), 40+(lig*80), image=dame_n1)
     
    dragndrop = DragManager()
    dragndrop.add_dragable(d_n)
    Mais j'ai deux problèmes:
    le premier et le plus important est que après un premier glisser déposer je ne peut plus recommencer
    le second est que lorsque je dépose la pièce elle doit aller au centre de la case demandée, ce qu'elle fait bien(en se dupliquant), mais elle reste également a l'endroit ou je l'ai déposée.
    Merci d'avance.

    Si vous avez besoin d'essayer le programme complet demandez moi.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Chipster_25 Voir le message
    Si vous avez besoin d'essayer le programme complet demandez moi.
    Normalement le glisser déposer est une fonctionnalité qui se travaille "à part": c'est juste une interaction de l'utilisateur avec des widgets et/ou des items d'un Canvas.
    Après côté code, vous avez déjà des moutures existantes (pour s'en inspirer) comme celle ci.

    Donc pour avancer, il faudrait déjà présenter le problème à résoudre (après avoir regardé comment ont fait vos prédécesseurs).

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

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Chipster_25 Voir le message
    Voici les programmes complets en pièce jointe
    J'espère (pour vous) que ça inspirera quelqu'un...

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

  4. #4
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2023
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2023
    Messages : 25
    Par défaut
    Je pensait qu'il vous aideraient a me donner une solution a mon problème...

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Je veux bien vous aider à construire une solution car c'est la base de la programmation... pour ce qui de vous la donner, cherchez sur Internet, il y a certainement des codes.

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

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2023
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2023
    Messages : 25
    Par défaut
    Je sais bien qu'il y a beaucoup de codes de drag and drop en ligne mais beaucoup ne correspondent pas a mon cas (plusieurs images dans un canvas) et même après en avoir consulté des dizaines je n'arrive pas a régler le problème de ne pas pouvoir drag and drop une deuxième fois la même image et je ne sait pas ou se trouve l'erreur car il n'y a pas de messages d'erreur et je ne voit rien qui puisse causer ce problème (j'ai réussi a régler le problème de l'image qui se duplique en la relâchant)
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class DragManager:
        def add_dragable(self, widget):
            c_echecs.tag_bind(widget, "<ButtonPress-1>", self.on_start)
            c_echecs.tag_bind(widget, "<B1-Motion>", self.on_drag)
            c_echecs.tag_bind(widget, "<ButtonRelease-1>", self.on_drop)
     
        def on_start(self, event):
            c_echecs.configure(cursor="hand2")
            pass
     
        def on_drag(self, event):
            global dame_n1
            pion_n1, cava_n1, fou_n1, tour_n1, dame_n1, roi_n1, pion_b1, cava_b1, fou_b1, tour_b1, dame_b1, roi_b1 = importation_pionsV1()
            d_n = c_echecs.create_image(event.x, event.y, image=dame_n1)
            pass
     
        def on_drop(self, event):
            global d_n
            c_echecs.configure(cursor="")
     
            for lig in range(8):
                for col in range(8):
                    if (lig * 80) <= event.y <= ((lig + 1) * 80) and 40 + (col * 80) <= event.x <= 40 + ((col + 1) * 80):
                        global dame_n1
                        pion_n1, cava_n1, fou_n1, tour_n1, dame_n1, roi_n1, pion_b1, cava_b1, fou_b1, tour_b1, dame_b1, roi_b1 = importation_pionsV1()
                        d_n = c_echecs.create_image(80 + (col * 80), 40 + (lig * 80), image=dame_n1)
     
     
    dragndrop = DragManager()
    dragndrop.add_dragable(d_n)

Discussions similaires

  1. [Python 3.X] Glisser-déposer entre deux treeview tkinter
    Par vad92 dans le forum Général Python
    Réponses: 10
    Dernier message: 20/02/2022, 14h01
  2. Réponses: 9
    Dernier message: 13/02/2015, 22h08
  3. Glisser-déposer avec Tkinter? (Tkdnd?)
    Par tyrtamos dans le forum Tkinter
    Réponses: 2
    Dernier message: 17/07/2008, 09h53
  4. Glisser déposer sur formulaire
    Par norvel dans le forum Access
    Réponses: 5
    Dernier message: 03/10/2005, 11h20
  5. [MFC] Glisser/Déposer dans une CView
    Par octopus984 dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2005, 10h15

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