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 :

Rotation de canvas


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 23
    Points
    23
    Par défaut Rotation de canvas
    Bonjour,

    Je dois faire pivoter des images (triangle et carré), je ne sais pas comment je doi s codés en python. je sais deja comment déplacer une image.
    Si vous pouviez m'aider.

    Merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    je pense que ce serait bien que tu détailles plus ton problème car il est difficile de répondre autrement.
    Par exemple, quel tool kit utilises-tu ? Comment sont représentés tes images ?
    Que veux-tu faire précisément ? Qu'appelles-tu exactement déplacer une image ?

    Bref, essaie de te placer dans la peau de quelqu'un qui voudrait te répondre et essaie de lui donner le plus d'éléments en main pour qu'il puisse comprendre ton problème.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    from Tkinter import *
    from commands import *
     
     
    class Creation_Image: 
        def __init__(self):
            fenetre=Tk()
            fenetre.title("Image a enregistrer")
            # creation des differents cadres
            zonedessin=LabelFrame(fenetre)
            zonedessin.configure(text="zone de dessin",bd=2,relief="groove")
            zonedessin.grid(row=1,rowspan=3,column=1,padx=10,pady=10)
            forme=LabelFrame(fenetre)
            forme.configure(text="selection de la forme")
            forme.grid(row=1,column=2,padx=10,pady=10)
            # creation de la zone de dessin
            self.canvas=Canvas(zonedessin)
            self.canvas.configure(width=500,height=500,bg="white")
            self.canvas.pack()
     
            # creation des boutons a selectioner
            self.figure=StringVar()
            self.figure.set("cercle")
     
            style1=Radiobutton(forme)
            style1.configure(variable=self.figure,value="cercle",text="cercle")
            style1.grid(row=1,column=1)
     
            style2=Radiobutton(forme)
            style2.configure(variable=self.figure,value="carre",text="carre")
            style2.grid(row=1,column=2)
     
            style3=Radiobutton(forme)
            style3.configure(variable=self.figure,value="triangle",text="triangle")
            style3.grid(row=1,column=3)
     
            style4=Radiobutton(forme)
            style4.configure(variable=self.figure,value="bouge",text="bouge")
            style4.grid(row=2,column=1)
     
            Button(fenetre,text="Enregistrer",command=lambda :self.enregistre()).grid(row=3,column=2)
     
            Button(fenetre,text="image",command=lambda : getstatusoutput('display dessin.pbm')).grid(row=4,column=2)
     
            #action a faire lorsque l'on appui sur la souri
            self.canvas.bind('<ButtonPress-1>', self.ButtonPress)
            self.canvas.bind('<B1-Motion>',     self.B1_Motion)
            self.canvas.bind('<ButtonRelease-1>', self.ButtonRelease)
     
     
            self.nbrecarres=0
            self.ListeCarre=[]
            self.nbrecercles=0
            self.ListeCercles=[]
            self.nbretriangles=0
            self.ListeTriangles=[]
     
            self.Cercles=[]
            self.Carres=[]
            self.Triangles=[]
        #Action a faire lorsque la figure est dessiner
        #On enregistre dans une liste les coordonnees de la figure    
        def ButtonRelease(self, event):
            self.x2=event.x
            self.y2=event.y
            if(self.figure.get()=="bouge"):
                self.canvas.move(self.IdObject,self.x2-self.x1,self.y2-self.y1)
                self.CoordDepla(self.IdObject)
                print 'carre',self.ListeCarre
                print 'cercles',self.ListeCercles
                print 'triangle',self.ListeTriangles
            if (self.figure.get()=="cercle"):
                self.ListeCercles.append(((self.x2-self.x1)/2)+self.x1)
                self.ListeCercles.append(((self.y2-self.y1)/2)+self.y1)
                self.ListeCercles.append((self.x2-self.x1)/2)
                print self.ListeCercles
                print self.Cercles
            if (self.figure.get()=="carre"):
                self.ListeCarre.append(((self.x2-self.x1)/2)+self.x1)
                self.ListeCarre.append(((self.y2-self.y1)/2)+self.y1)
                print self.ListeCarre     
                print self.Carres        
            if (self.figure.get()=="triangle"):
                self.ListeTriangles.append((self.x2-self.x1)/2+self.x1)
                self.ListeTriangles.append(self.y1)
                self.ListeTriangles.append(((self.x2-self.x1)/2)+self.x1)
                self.ListeTriangles.append(((self.y2-self.y1)/2)+self.y1)
                print self.ListeTriangles       
                print self.Triangles 
     
        #On met a jour les coordonnees de la figure            
        def B1_Motion(self, event):
            self.x3=event.x
            self.y3=event.y
            if (self.figure.get()=="cercle"):
                self.canvas.coords(self.item, self.x1, self.y1, self.x3, self.x3 - self.x1 + self.y1)
            elif (self.figure.get()=="carre"):
                self.canvas.coords(self.item, self.x1, self.y1, self.x3, self.x3 - self.x1 + self.y1)
            elif (self.figure.get()=="triangle"):
                self.canvas.coords(self.item, (self.x3-self.x1)/2+self.x1, self.y1, self.x3,  self.x3 - self.x1 + self.y1, self.x1, self.x3 - self.x1 + self.y1)
     
     
        #Creation de la figure
        def ButtonPress(self, event):
            self.x1=event.x
            self.y1=event.y
            self.x2=event.x
            self.y2=event.y
            if (self.figure.get()=="cercle"):
                self.item=self.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill='black')
                self.nbrecercles+=1
                self.Cercles.append(self.canvas.find_closest(self.x1,self.y1))
            elif (self.figure.get()=="carre"):
                self.item=self.canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2,fill='black')
                self.nbrecarres+=1
                self.ListeCarre.append(self.x1)
                self.ListeCarre.append(self.y1)
                self.Carres.append(self.canvas.find_closest(self.x1,self.y1))
            elif (self.figure.get()=="triangle"):
                self.item=self.canvas.create_polygon (self.x1, self.y1, self.x2, (self.y1 + self.y2) / 2, self.x1, self.y2,fill='black')
                self.nbretriangles+=1
                self.Triangles.append(self.canvas.find_closest(self.x1,self.y1))
            elif (self.figure.get()=="bouge"):
                self.IdObject=self.canvas.find_closest(self.x2,self.y2)
     
        #Mise a jour des nouvelles coordonnees apres avoir deplace une figure            
        def CoordDepla(self,IdObject):
            compteur=0
            for j in self.Carres:
                if j==IdObject:
                    self.ListeCarre[compteur]=self.x2-self.x1
                    self.ListeCarre[compteur+1]=self.y2-self.y1
                    self.ListeCarre[compteur+2]=self.x2
                    self.ListeCarre[compteur+3]=self.y2
                compteur  = compteur + 1
            compteur=0
            for j in self.Cercles:
                if j==IdObject:
                    self.ListeCercles[compteur*3]=self.x2
                    self.ListeCercles[compteur*3+1]=self.y2
                compteur  = compteur + 1
            compteur=0
            for j in self.Triangles:
                if j==IdObject:
                    self.ListeTriangles[compteur]=self.x2
                    self.ListeTriangles[compteur+1]=self.y2-self.y1
                    self.ListeTriangles[compteur+2]=self.x2
                    self.ListeTriangles[compteur+3]=self.y2
                compteur  = compteur + 1
    Creation_Image()
    mainloop()
    cela me permet de dessiner les triangles, les carrés et les cercles et de les deplacer mais je n'arrive pas à faire les rotations des différentes figures.

  4. #4
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Et bien si tu as déjà l'items il te suffit d'en récupérer les coordonnées et de calculer la rotation.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Radiobutton(forme, variable=self.figure, value="rotation", text="rotation").grid(row=2, column=2) # Pas la peine de nommer ton widget si tu n'en as pas besoin par la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            elif(self.figure.get()=="rotation"):
                print self.IdObject
                lcords = self.canvas.coords(self.IdObject)
                print lcords # A toi de jouer avec
    Notes : Je trouve ta méthode de sélection hazardeuse. regarde le résultat du print self.IdObject. Alors que l'option halo est à None si elle n'est pas spécifiée finc_closest donne des résultats bizarres.
    Même dans le cas d'un self.canvas.find_closest(self.x2,self.y2, halo=0)
    J'y préfère largement un self.canvas.find_withtag(CURRENT) mais tu dois pour cela faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.item=self.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, tag='cercle', fill='black')
    Tu ne devrais pas utiliser le nom de l'event comme nom de fonction.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    merci pour ton aide je vé voir ce que je peux faire

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

Discussions similaires

  1. [HTML5] canvas méthode rotate ?
    Par Luke spywoker dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2012, 19h19
  2. Rotation dans un canvas (le retour)
    Par baloood dans le forum Tkinter
    Réponses: 4
    Dernier message: 30/05/2010, 07h55
  3. [Canvas] Rotation d'un rectangle ou image
    Par airod dans le forum Tkinter
    Réponses: 1
    Dernier message: 03/10/2007, 19h59
  4. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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