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, glissé-déplacé et rotations


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Par défaut Tkinter, glissé-déplacé et rotations
    Bonsoir! Je travaille en ce moment sur un petit projet...
    En bref, je créé des figures dans un Canvas Tkinter, puis j'aimerais pouvoir les déplacer et leur faire faire des rotations à la souris. Pour les déplacements, j'ai un peu cherché et je suppose que l'idée serait d'utiliser <B1-Motion>; mais la fonction move des figures utilise des coordonnées relatives, donc je ne sais pas comment gérer ça. Quant aux rotations, je n'y ai pas encore du tout réfléchi mais à première vue je n'ai aucune idée de comment faire. Auriez-vous quelques pistes à me proposer?

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Ici

    @+

  3. #3
    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
    Par défaut
    As tu utiliser la methode find_closest de Canvas pour capturer l'objet que tu veux déplacer?
    Dans le livre de G.Swinnen, il y a tout ce qui te faut pour faire les déplacements d'objet dans un canvas.
    voici un extrait de code que j'ai ecrit il y a quelque années.
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #### deplacement d'objet sur le Canvas  
     
    def mousedown(event):
        global x,y,Object,ID,coord_dic,coord_frame_dic,coord_dic_imgsupp
        x,y=event.x,event.y
     
     
        can.configure(cursor='draft_small')
        Object=can.find_closest(x,y,halo=15)
        ID=Object
     
        if ID[0]==coord_dic[4]:
            pass
     
        else:
     
            can.itemconfigure(Object,width=2)
            can.lift(Object)
     
     
     
    def mouseup(event):
        global Object,coordcroix,x,y,listrect,CM,RM,coordmaster,ID,coord_dic
        can.configure(cursor='tcross')
     
     
        #if Object:
            #Object=tk.NONE
     
        if len(listrect)>0:
            if ID[0]==listrect[4]:
                X,Y=x+(listrect[2]-listrect[0]),y+(listrect[3]-listrect[1])
                #print ID
                can.delete(ID[0])
                CM=can.create_rectangle(x,y,X,Y,width=2,outline='green',dash=(4,6))
                listrect=(x,y,X,Y,CM)
                can.itemconfigure(Object,width=1)
                #print 'listrect',listrect
     
        if len(coordmaster)>0:
            if ID[0]==coordmaster[4]:
                X,Y=x+(coordmaster[2]-coordmaster[0]),y+(coordmaster[3]-coordmaster[1])
                #print ID
                can.delete(ID[0])
                RM=can.create_rectangle(x,y,X,Y,width=2,outline='blue',dash=(4,6))
                coordmaster=(x,y,X,Y,RM)
                can.itemconfigure(Object,width=1)
                #print 'coormaster',coordmaster
     
     
        if len(coordcroix)!=0:
            for i in coordcroix:
                if i[0]==ID[0]:
                    can.delete(ID[0])
                    ID=can.create_oval((event.x)-5,(event.y)-5,(event.x)+5,(event.y)+5,
                                       outline='yellow',fill='yellow',width=2)
                    coordcroix.remove(i)
                    coordcroix.append((ID,event.x,event.y))
                    can.itemconfigure(Object,width=1)
                    #print 'coordcroix',coordcroix
     
     
     
     
    def mousemove(event):
        global x,y,Object,ID,coord_dic
        x1,y1=event.x,event.y 
        dx,dy=x1-x,y1-y
     
        if ID[0]==coord_dic[4]:
            pass
     
        else:
            can.move(Object,dx,dy)
            x,y=x1,y1
     
    ##Bind des action souris sur le canvas
    can=tkinter.Canvas(....)
    can.bind('<Button-1>',mousedown)
    can.bind('<ButtonRelease-1>',mouseup)
    can.bind('<B1-Motion>',mousemove)
    ca peut t'aider

    par contre adapte pour coder en objet, car le coup du global, c'est pas propre

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par Niarr Voir le message
    En bref, je créé des figures dans un Canvas Tkinter... Quant aux rotations, je n'y ai pas encore du tout réfléchi mais à première vue je n'ai aucune idée de comment faire. Auriez-vous quelques pistes à me proposer?
    Par figures tu parle des items (oval, rectangle etc...) ou de figures complexes associant plusieurs items ? Dans tous les cas avec .coords et les tags tu identifie et déplace les items. A toi de définir le bind pour la rotation.

    @+

    Edit : Un exemple de coords et des tags.

Discussions similaires

  1. Récupérer le chemin d'un fichier déplacé / glissé
    Par Nikolas dans le forum Windows
    Réponses: 4
    Dernier message: 01/11/2010, 16h11
  2. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  3. Rotation d'un bouton ?
    Par ken_survivant dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2003, 18h16
  4. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  5. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

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