我添加工具提示到我的程序,他们应该出现,如果鼠标在部件超过1秒。但是有一个问题,当鼠标简单地经过小部件时,工具提示总是会出现。我的意思是他们应该出现,如果鼠标停留在小部件超过1秒,但他们也出现时,鼠标不留在小部件。
所以我决定添加一些代码行,当鼠标进入小部件时延迟1秒,并检查鼠标是否仍在小部件上。如果鼠标仍在,则会显示工具提示。但我不知道如何检查鼠标是否在小部件上。我试过widget.focus_get()
,但它只是给出了一个输出点。如果老鼠不在那里也会有一个点。所以这对我没用。我做了很多研究,但我找不到关于这个的东西。
我使用的是Python3.7.9和tkinter.ttk
我从here复制了代码,并对淡入淡出动画进行了一点点修改。下面是我的代码:
label = Label(root, text="Label")
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, widget):
global tw
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() + 20
y = y + cy + self.widget.winfo_rooty() +20
self.tipwindow = tw = Toplevel(self.widget)
tw.wm_overrideredirect(1)
tw.wm_geometry("+%d+%d" % (x, y))
tw.attributes("-alpha", 0)
label = Label(tw, text=self.text, justify=LEFT, relief=SOLID, borderwidth=1)
label.pack(ipadx=1)
def fade_in():
alpha = tw.attributes("-alpha")
if alpha < root.attributes("-alpha"):
alpha += .1
tw.attributes("-alpha", alpha)
tw.after(10, fade_in)
elif alpha == root.attributes("-alpha"):
tw.attributes("-alpha", root.attributes("-alpha"))
try:
tw.tk.call("::tk::unsupported::MacWindowStyle", "style", tw._w, "help", "noActivates")
except TclError:
pass
fade_in()
def hidetip(self, widget):
tw = self.tipwindow
self.tipwindow = None
def fade_away():
alpha = tw.attributes("-alpha")
if alpha > 0:
alpha -= .1
tw.attributes("-alpha", alpha)
tw.after(10, fade_away)
else:
tw.destroy()
fade_away()
def createToolTip(widget, text):
toolTip = ToolTip(widget)
def enter(event):
time.sleep(1000) #Wait 1 second
if widget.focus_get() == True: #Check if mouse is still on the widget. But not working.
toolTip.showtip(text, widget)
def leave(event):
ToolTipActive = False
toolTip.hidetip(widget)
widget.bind('<Enter>', enter)
widget.bind('<Leave>', leave)
createToolTip(label, "This is a tooltip")
1条答案
按热度按时间zzwlnbp81#
我不知道你的目标。你可以自己做一个
tooltip/hovertip
。如果你想自己做,你需要在悬停时使用bind
。使用悬停提示:
例如:
被盗自:How do I display tooltips in Tkinter?
悬停时使用绑定:(有不同的方式)