Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 4 # Ideas gleaned from PySol |
| 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 | 7 |
| 8 class ToolTipBase: | |
| 9 | |
| 10 def __init__(self, button): | |
| 11 self.button = button | |
| 12 self.tipwindow = None | |
| 13 self.id = None | |
| 14 self.x = self.y = 0 | |
| 15 self._id1 = self.button.bind("<Enter>", self.enter) | |
| 16 self._id2 = self.button.bind("<Leave>", self.leave) | |
| 17 self._id3 = self.button.bind("<ButtonPress>", self.leave) | |
| 18 | |
| 19 def enter(self, event=None): | |
| 20 self.schedule() | |
| 21 | |
| 22 def leave(self, event=None): | |
| 23 self.unschedule() | |
| 24 self.hidetip() | |
| 25 | |
| 26 def schedule(self): | |
| 27 self.unschedule() | |
| 28 self.id = self.button.after(1500, self.showtip) | |
| 29 | |
| 30 def unschedule(self): | |
| 31 id = self.id | |
| 32 self.id = None | |
| 33 if id: | |
| 34 self.button.after_cancel(id) | |
| 35 | |
| 36 def showtip(self): | |
| 37 if self.tipwindow: | |
| 38 return | |
| 39 # The tip window must be completely outside the button; | |
| 40 # otherwise when the mouse enters the tip window we get | |
| 41 # a leave event and it disappears, and then we get an enter | |
| 42 # event and it reappears, and so on forever :-( | |
| 43 x = self.button.winfo_rootx() + 20 | |
| 44 y = self.button.winfo_rooty() + self.button.winfo_height() + 1 | |
| 45 self.tipwindow = tw = Toplevel(self.button) | |
| 46 tw.wm_overrideredirect(1) | |
| 47 tw.wm_geometry("+%d+%d" % (x, y)) | |
| 48 self.showcontents() | |
| 49 | |
| 50 def showcontents(self, text="Your text here"): | |
| 51 # Override this in derived class | |
| 52 label = Label(self.tipwindow, text=text, justify=LEFT, | |
| 53 background="#ffffe0", relief=SOLID, borderwidth=1) | |
| 54 label.pack() | |
| 55 | |
| 56 def hidetip(self): | |
| 57 tw = self.tipwindow | |
| 58 self.tipwindow = None | |
| 59 if tw: | |
| 60 tw.destroy() | |
| 61 | |
| 62 class ToolTip(ToolTipBase): | |
| 63 def __init__(self, button, text): | |
| 64 ToolTipBase.__init__(self, button) | |
| 65 self.text = text | |
| 66 def showcontents(self): | |
| 67 ToolTipBase.showcontents(self, self.text) | |
| 68 | |
| 69 class ListboxToolTip(ToolTipBase): | |
| 70 def __init__(self, button, items): | |
| 71 ToolTipBase.__init__(self, button) | |
| 72 self.items = items | |
| 73 def showcontents(self): | |
| 74 listbox = Listbox(self.tipwindow, background="#ffffe0") | |
| 75 listbox.pack() | |
| 76 for item in self.items: | |
| 77 listbox.insert(END, item) | |
| 78 | |
| 79 def main(): | |
| 80 # Test code | |
| 81 root = Tk() | |
| 82 b = Button(root, text="Hello", command=root.destroy) | |
| 83 b.pack() | |
| 84 root.update() | |
| 85 tip = ListboxToolTip(b, ["Hello", "world"]) | |
| 35934 | 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 | 88 if __name__ == '__main__': |
| 89 main() |
