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
| # -*- coding:utf-8 -*-
from Tkinter import *
class Application:
def __init__(self):
self.root=Tk()
self.root.title('Graphes')
self.root.geometry("800x600")
self.barreEtat = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W)
self.barreEtat.pack(side=BOTTOM, fill=X)
self.c = Canvas(self.root, bg="white")
self.c.pack(side=TOP, fill=BOTH, expand=YES)
self.u = 20
self.uSur2 = int(self.u / 2)
self.c.create_line( 2 * self.u, 15 * self.u, 2 * self.u, 2 * self.u, arrow=LAST)
self.c.create_line( 2 * self.u, 15 * self.u, 24 * self.u, 15 * self.u, arrow=LAST)
self.lesbarres = []
self.lesbarres.append( self.creerUneBarre( 1, 10, "tan") )
self.lesbarres.append( self.creerUneBarre( 2, 9, "tan") )
self.lesbarres.append( self.creerUneBarre( 3, 8, "tan") )
self.lesbarres.append( self.creerUneBarre( 4, 7, "tan") )
self.lesbarres.append( self.creerUneBarre( 5, 6, "tan") )
self.lesbarres.append( self.creerUneBarre( 6, 5, "tan") )
self.lesbarres.append( self.creerUneBarre( 7, -2, "tan") )
self.lesbarres.append( self.creerUneBarre( 8, 4, "tan") )
self.infoX, self.infoY = 0,0
self.c.create_text(self.infoX,self.infoY, text='', tag="info")
self.c.bind("<Motion>", self.afficherTaille) # si souris bouge, on lance l'affichage de la taille
self.root.mainloop()
def creerUneBarre(self, position, hauteur, couleur):
x1 = 2 * self.u + position * self.u + position * self.u
y1 = 15 * self.u - hauteur * self.u
x2 = x1 + self.u
y2 = 15 * self.u
return self.c.create_rectangle(x1,y1,x2,y2,fill=couleur, activefill="yellow")
def afficherTaille(self,event):
objets = self.c.find_closest(event.x,event.y,10) # trouve l'objet (les objets ?) le plus proche
if len(objets) > 0:
coordonnees = self.c.coords(objets[0]) # prends le 1er
h = coordonnees[3]-coordonnees[1] # hauteur de la barre
dx , dy = coordonnees[0]-self.infoX+self.uSur2, coordonnees[1]-self.infoY-self.uSur2 # calcul du déplacement à faire
self.infoX += dx # actualisation des nouvelles coordonnées
self.infoY += dy
self.c.itemconfigure("info", text=str(int(h)) ) #changement du contenu (hauteur)
self.c.move('info',dx,dy) #déplacement
#print (event.x,event.y,repr(objets[0]), self.c.coords(objets[0]), h)
# départ du programme principal :
if __name__ == '__main__':
app = Application() |
Partager