annotate Lib/idlelib/ToolTip.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b53604fad54b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25263
73429ca748ce MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 18561
diff changeset
1 # general purpose 'tooltip' routines - currently unused in idlefork
73429ca748ce MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 18561
diff changeset
2 # (although the 'calltips' extension is partly based on this code)
73429ca748ce MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 18561
diff changeset
3 # may be useful for some purposes in (or almost in ;) the current project scope
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4 # Ideas gleaned from PySol
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47130
diff changeset
6 from Tkinter import *
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8 class ToolTipBase:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
9
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
10 def __init__(self, button):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
11 self.button = button
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
12 self.tipwindow = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13 self.id = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
14 self.x = self.y = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15 self._id1 = self.button.bind("<Enter>", self.enter)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16 self._id2 = self.button.bind("<Leave>", self.leave)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17 self._id3 = self.button.bind("<ButtonPress>", self.leave)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19 def enter(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20 self.schedule()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 def leave(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23 self.unschedule()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 self.hidetip()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 def schedule(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 self.unschedule()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 self.id = self.button.after(1500, self.showtip)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30 def unschedule(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 id = self.id
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 self.id = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33 if id:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34 self.button.after_cancel(id)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
36 def showtip(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
37 if self.tipwindow:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
39 # The tip window must be completely outside the button;
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40 # otherwise when the mouse enters the tip window we get
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 # a leave event and it disappears, and then we get an enter
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42 # event and it reappears, and so on forever :-(
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43 x = self.button.winfo_rootx() + 20
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 y = self.button.winfo_rooty() + self.button.winfo_height() + 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45 self.tipwindow = tw = Toplevel(self.button)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
46 tw.wm_overrideredirect(1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47 tw.wm_geometry("+%d+%d" % (x, y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48 self.showcontents()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 def showcontents(self, text="Your text here"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 # Override this in derived class
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52 label = Label(self.tipwindow, text=text, justify=LEFT,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 background="#ffffe0", relief=SOLID, borderwidth=1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 label.pack()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 def hidetip(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 tw = self.tipwindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 self.tipwindow = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 if tw:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 tw.destroy()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 class ToolTip(ToolTipBase):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63 def __init__(self, button, text):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 ToolTipBase.__init__(self, button)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 self.text = text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 def showcontents(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 ToolTipBase.showcontents(self, self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 class ListboxToolTip(ToolTipBase):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 def __init__(self, button, items):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71 ToolTipBase.__init__(self, button)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72 self.items = items
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73 def showcontents(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 listbox = Listbox(self.tipwindow, background="#ffffe0")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 listbox.pack()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 for item in self.items:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 listbox.insert(END, item)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 def main():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 # Test code
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 root = Tk()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 b = Button(root, text="Hello", command=root.destroy)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 b.pack()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 root.update()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 tip = ListboxToolTip(b, ["Hello", "world"])
35934
1fdebbd60d7d Fix main() call
Kurt B. Kaiser <kbk@shore.net>
parents: 25317
diff changeset
86 root.mainloop()
18561
9b42df4b74d4 py-cvs-rel2_1 (Rev 1.2) merge - whitespace normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
87
35934
1fdebbd60d7d Fix main() call
Kurt B. Kaiser <kbk@shore.net>
parents: 25317
diff changeset
88 if __name__ == '__main__':
1fdebbd60d7d Fix main() call
Kurt B. Kaiser <kbk@shore.net>
parents: 25317
diff changeset
89 main()