Bonjour à vous,

L'histoire commence quand je réussis à dessiner des figures géométriques dans mon canevas....(avec votre aide).

Donc je ne screen pas mais il y a un canevas de 600x600, et à l'intérieur , 3 carrés, 4 triangles et 8 cercles (au hasard que j'ai moi meme dessiné).

Maintenant je souhaiterais pouvoir sélectionner une figure au hasard pour pouvoir la déplacer ou la faire pivoter...

Je pense avoir compris l'histoire des déplacements (merci G.Swinnen), mais le problème qui me trotte dans la tete est , comment vais je pouvoir selectionner une des figures à l'écran ?

Le code est exactement le même qu'un précédent post sur comment dessiner un triangle dans un canevas.
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
 
from Tkinter import *
 
class Dessiner(Tk):
    def __init__(self):
        Tk.__init__(self)
 
        self.fig=StringVar()
        self.fig.trace("w", self.fig_callback)
 
        self.title("Dessiner: carre, triangle ou cercle")
 
        self.canvas=Canvas(self, bg="white", width=600, height=600)
        self.canvas.pack(side=TOP)
 
        frmbout = Frame(self) # Conteneur pour centrer les boutons
        frmbout.pack(side=TOP)
        Button(frmbout, text="Quit", command=self.destroy).pack(side=RIGHT, padx=5, pady=2, ipadx=2)
	self.bcarre = Button(frmbout, text="Carre", fg="black", command=lambda: self.fig.set("Carre"))
	self.bcarre.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
	self.bcercle = Button(frmbout, text="Cercle", fg="black", command=lambda: self.fig.set("Cercle"))
	self.bcercle.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
        self.btriangle = Button(frmbout, text="Triangle", fg="black", command=lambda: self.fig.set("Triangle"))
        self.btriangle.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
 
        self.fig.set("Cercle") # Inutile d'initialiser self.fig plusieurs fois
 
        # Cela ne semble pas etre le sujet mais :
        # Il est aussi possible de gerer cela par evenement avec un self.fig=None comme flag
        # de l'état du bouton
        # Tu garde ton def clic
        # Tu fais un self.canvas.bind("<Motion>", modif) ou tu rajoute un test sur self.fig
        # Tu fais un bind self.canvas("<ButtonRelease-1>", self.clicoff) > def clicoff: self.fig=None
        # Cela te permet de vérifier la présence d'un item lors du clic pour le modifier par la suite. 
        self.canvas.bind("<ButtonPress-1>",self.clic)
        self.canvas.bind("<B1-Motion>",self.modif)
 
    def fig_callback(self, *args):
        if self.fig.get() == "Cercle":
            self.bcercle.config(fg="white")
            self.bcarre.config(fg="black")
            self.btriangle.config(fg="black")
 
        elif self.fig.get() == "Carre":
            self.bcercle.config(fg="black")
            self.bcarre.config(fg="white")
            self.btriangle.config(fg="black")
 
        elif self.fig.get() == "Triangle":
            self.bcercle.config(fg="black")
            self.bcarre.config(fg="black")
            self.btriangle.config(fg="white")
 
    def modif(self, event):
        # Pas besoin de reprendre les points x1 et y1. C'est le départ
        self.x2=event.x
        self.y2=event.y
 
        if self.fig.get() != "Triangle":
            self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2)
        else:
            dist=self.x2 - self.x1 # Ton calcul pour le triangle n'étais pas bon.
            self.canvas.coords(self.item, self.x1-dist, self.y1+dist, self.x1, self.y1, self.x1+dist, self.y1+dist)
 
    def clic(self, event):
        self.x1=event.x
        self.y1=event.y
        if self.fig.get() == "Cercle":
            self.item=self.canvas.create_oval(self.x1, self.y1, self.x1, self.y1, fill="black")
        elif self.fig.get() == "Carre":
	    self.item=self.canvas.create_rectangle(self.x1, self.y1, self.x1, self.y1, fill="black")
        elif self.fig.get() == "Triangle":
	    self.item=self.canvas.create_polygon(self.x1, self.y1, self.x1, self.y1, self.x1, self.y1) # fill="black" inutile dans le cas du polygon.
 
if __name__== "__main__":     
    fen=Dessiner()    
    fen.mainloop()
J'ai codé à coté un script qui me dis où je me situe par rapport à l'axe des X et des Y... mais bon, ca ne me sert pas vraiment... Oo

Merci d'avance !

Edit : Lol je viens de m'en rendre compte, mais je ne compte pas voler le code ci-dessus... (abusé j'ai meme laissé les commentaires du monsieur :s).