Bonjour,

J'essaie de faire des graphes sur le Canvas de Tkinter. Voici le code de test où je suis arrivé :

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
# -*- 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.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.creerUneBarre( 1, 10, "tan")
        self.creerUneBarre( 2,  9, "tan")
        self.creerUneBarre( 3,  8, "tan")
        self.creerUneBarre( 4,  7, "tan")
        self.creerUneBarre( 5,  6, "tan")
        self.creerUneBarre( 6,  5, "tan")
        self.creerUneBarre( 7, -2, "tan")
        self.creerUneBarre( 8,  4, "tan")
 
        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
        self.c.create_rectangle(x1,y1,x2,y2,fill=couleur, activefill="yellow")
 
 
# départ du programme principal :
if __name__ == '__main__':
    app = Application()
Ce que je voudrais faire pour rendre mon graphe propre, lisible et en même temps pourvoyeur d'information : je voudrais que quand la souris survole une barre du graphe, on voit apparaître le chiffre de la hauteur au-dessus de la barre.

Est-ce possible de faire cela ?

Je suppose qu'il faudra, d'une façon ou d'une autre, mettre un event-listener sur la référence d'un rectangle dessiné ?

Si la réponse est oui, comment faire exactement ?