mirror of
				https://github.com/python/cpython.git
				synced 2025-10-25 10:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # A CallTip window class for Tkinter/IDLE.
 | |
| # After ToolTip.py, which uses ideas gleaned from PySol
 | |
| 
 | |
| # Used by the CallTips IDLE extension.
 | |
| import os
 | |
| from Tkinter import *
 | |
| 
 | |
| class CallTip:
 | |
| 
 | |
|     def __init__(self, widget):
 | |
|         self.widget = widget
 | |
|         self.tipwindow = None
 | |
|         self.id = None
 | |
|         self.x = self.y = 0
 | |
| 
 | |
|     def showtip(self, text):
 | |
|         self.text = text
 | |
|         if self.tipwindow or not self.text:
 | |
|             return
 | |
|         self.widget.see("insert")
 | |
|         x, y, cx, cy = self.widget.bbox("insert")
 | |
|         x = x + self.widget.winfo_rootx() + 2
 | |
|         y = y + cy + self.widget.winfo_rooty()
 | |
|         self.tipwindow = tw = Toplevel(self.widget)
 | |
|         tw.wm_overrideredirect(1)
 | |
|         tw.wm_geometry("+%d+%d" % (x, y))
 | |
|         label = Label(tw, text=self.text, justify=LEFT,
 | |
|                       background="#ffffe0", relief=SOLID, borderwidth=1)
 | |
|         label.pack()
 | |
|                       
 | |
|     def hidetip(self):
 | |
|         tw = self.tipwindow
 | |
|         self.tipwindow = None
 | |
|         if tw:
 | |
|             tw.destroy()
 | |
| 
 | |
| 
 | |
| ###############################
 | |
| #
 | |
| # Test Code
 | |
| #
 | |
| class container: # Conceptually an editor_window
 | |
|     def __init__(self):
 | |
|         root = Tk()
 | |
|         text = self.text = Text(root)
 | |
|         text.pack(side=LEFT, fill=BOTH, expand=1)
 | |
|         text.insert("insert", "string.split")
 | |
|         root.update()
 | |
|         self.calltip = CallTip(text)
 | |
| 
 | |
|         text.event_add("<<calltip-show>>", "(")
 | |
|         text.event_add("<<calltip-hide>>", ")")
 | |
|         text.bind("<<calltip-show>>", self.calltip_show)
 | |
|         text.bind("<<calltip-hide>>", self.calltip_hide)
 | |
|         
 | |
|         text.focus_set()
 | |
|         # root.mainloop() # not in idle
 | |
| 
 | |
|     def calltip_show(self, event):
 | |
|         self.calltip.showtip("Hello world")
 | |
| 
 | |
|     def calltip_hide(self, event):
 | |
|         self.calltip.hidetip()
 | |
| 
 | |
| def main():
 | |
|     # Test code
 | |
|     c=container()
 | |
| 
 | |
| if __name__=='__main__':
 | |
|     main()
 | 
