old_contents: # 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()
  
new_contents: # 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,
                        font = self.widget['font'])
          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()
  
subject: Mark Hammond writes: Tim's suggestion of copying the font for the CallTipWindow from the text control makes sense, and actually makes the control look better IMO.