0

I'm trying to apply a method describing here Display message when hovering over something with mouse cursor in Python

from tkinter import *

class ToolTip(object):
    def __init__(self, widget):
        self.widget = widget
        self.tipwindow = None
        self.id = None
        self.x = self.y = 0

    def showtip(self, text):
        "Display text in tooltip window"
        self.text = text
        if self.tipwindow or not self.text:
            return
        x, y, cx, cy = self.widget.bbox("insert")
        x = x + self.widget.winfo_rootx() + 57
        y = y + cy + self.widget.winfo_rooty() +27
        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=("tahoma", "8", "normal"))
        label.pack(ipadx=1)

    def hidetip(self):
        tw = self.tipwindow
        self.tipwindow = None
        if tw:
            tw.destroy()

def CreateToolTip(widget, text):
    toolTip = ToolTip(widget)
    def enter(event):
        toolTip.showtip(text)
    def leave(event):
        toolTip.hidetip()
    widget.bind('<Enter>', enter)
    widget.bind('<Leave>', leave)



button = Button(root, text = 'click mem')
button.pack()
CreateToolTip(button, text = 'Hello World')

But this method is not working with treeview table. When I try to execute this code like:

tree = ttk.Treeview(frame)
tree.pack()
CreateToolTip(tree, text = 'Hello World')

The mistake appears:

Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
return self.func(*args)
File "/home/polina/PycharmProjects/dynamic_table/moxa.py", line 66, in enter
toolTip.showtip(text)
File "/home/polina/PycharmProjects/dynamic_table/moxa.py", line 46, in showtip
x, y, cx, cy = self.widget.bbox("insert")
File "/usr/lib/python3.8/tkinter/ttk.py", line 1217, in bbox
return self._getints(self.tk.call(self._w, "bbox", item, column)) or ''
_tkinter.TclError: Item insert not found

Is there another method to display a comment when we hover over row? Or maybe the described above can be fixed?

0 Answers0