Salome HOME
Import dans la branche I26 de la version 7.1.16 modifiée par CCAR (au 18/9/2003)
[tools/eficas.git] / Editeur / tooltip.py
1 """
2     Ce module propose la classe TOOLTIP pour
3     mettre en oeuvre les bulles d'aide
4 """
5
6 import Tkinter
7
8 class TOOLTIP:
9     def __init__(self,widget):
10         self.widget=widget
11         self.text = None
12         self.timer = None
13         self.tooltip = None
14         self.label = None
15         self.bindings = []
16         self.bindings.append(self.widget.bind("<Enter>", self._enter))
17         self.bindings.append(self.widget.bind("<Leave>", self._leave))
18         self.bindings.append(self.widget.bind("<ButtonPress>", self._leave))
19         # user overrideable settings
20         self.time = 1000                    # milliseconds
21         self.relief = Tkinter.SOLID
22         self.justify = Tkinter.LEFT
23         self.fg = "#000000"
24         self.bg = "#ffffe0"
25         self.xoffset = 20
26         self.yoffset = 1
27
28     def setText(self, text):
29         self.text = text
30
31     def _unbind(self):
32         if self.bindings and self.widget:
33             self.widget.unbind("<Enter>", self.bindings[0])
34             self.widget.unbind("<Leave>", self.bindings[1])
35             self.widget.unbind("<ButtonPress>", self.bindings[2])
36             self.bindings = []
37
38     def destroy(self):
39         self._unbind()
40         self._leave()
41
42     def _enter(self, *event):
43         after_cancel(self.timer)
44         self.timer = after(self.widget, self.time, self._showTip)
45
46     def _leave(self, *event):
47         after_cancel(self.timer)
48         self.timer = None
49         if self.tooltip:
50             self.label.destroy()
51             destruct(self.label)
52             self.label = None
53             self.tooltip.destroy()
54             destruct(self.tooltip)
55             self.tooltip = None
56
57     def _showTip(self):
58         if self.tooltip or not self.text:
59             return
60         c = self.widget.__class__
61         if c in (Tkinter.Button,):
62             if self.widget["state"] == Tkinter.DISABLED:
63                 return
64         x = self.widget.winfo_rootx()
65         y = self.widget.winfo_rooty() + self.widget.winfo_height()
66         x = x + self.xoffset
67         y = y + self.yoffset
68         self.tooltip = Tkinter.Toplevel()
69         self.tooltip.wm_iconify()
70         self.tooltip.wm_overrideredirect(1)
71         self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy)
72         self.label = Tkinter.Label(self.tooltip, text=self.text,
73                          relief=self.relief, justify=self.justify,
74                          fg=self.fg, bg=self.bg, bd=1, takefocus=0)
75         self.label.pack(ipadx=1, ipady=1)
76         self.tooltip.wm_geometry("%+d%+d" % (x, y))
77         self.tooltip.wm_deiconify()
78