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
| # -*- 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 = [[10, "tan"],[9, "tan"],[8, "tan"],[7, "tan"],[6, "tan"],[5, "tan"],[-2, "tan"],[4, "tan"]]
ind = 1
for unebarre in self.lesbarres:
self.creerUneBarre(ind, unebarre[0], unebarre[1])
ind += 1
self.infoX, self.infoY = 0,0
self.c.create_text(self.infoX, self.infoY, text='', tag='info')
self.root.mainloop()
def onFocusOff(self, event):
self.infoX, self.infoY = 0,0
self.c.itemconfigure('info', text='')
self.c.coords('info', 0, 0)
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
# Les tags 1 et 2 sont utiliser par les create_line
self.c.create_rectangle(x1, y1, x2, y2, fill=couleur, activefill="yellow", tag="b"+str(position))
self.c.tag_bind("b"+str(position), "<Enter>", self.onFocusIn)
self.c.tag_bind ("b"+str(position), "<Leave>", self.onFocusOff)
def onFocusIn(self, event):
coordonnees = self.c.coords(self.c.find_withtag(CURRENT))
if int(coordonnees[3]) <= (15 * self.u):
self.c.itemconfigure('info', text=str(int(coordonnees[3]-coordonnees[1])))
dx , dy = coordonnees[0]-self.infoX+self.uSur2, coordonnees[1]-self.infoY-self.uSur2
self.infoX += dx
self.infoY += dy
else:
self.c.itemconfigure('info', text='-'+str(int(coordonnees[3]-coordonnees[1])))
print coordonnees
dx , dy = coordonnees[0]+self.infoX+self.uSur2, coordonnees[3]+self.infoY+self.uSur2
self.infoX -= dx
self.infoY -= dy
self.c.move('info', dx, dy)
if __name__ == '__main__':
app = Application() |