如何在不覆盖按钮按压动画的情况下实现此Python Tkinter工具提示
我正在使用以下脚本来为工具提示(也就是鼠标悬停时显示的小提示)进行分配和管理。这个脚本是有效的,但有一个小问题。也就是说,当我给按钮添加工具提示后,这些按钮就不会有点击时的动画效果了,除非我让工具提示的脚本在500毫秒后执行。你们有什么建议吗?如果可以的话,我希望按钮的原始行为能一直保持,并且在显示工具提示之前有500毫秒的等待时间。
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):
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() +15
y = y + cy + self.widget.winfo_rooty() +65
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(self,widget,text):
toolTip = self.ToolTip(widget)
def enter(event): root.after(500,show(event))
def show(event): toolTip.showtip(text)
def leave(event): toolTip.hidetip()
widget.bind('<Enter>', enter)
widget.bind('<Leave>', leave)
2 个回答
0
在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,有人可能在使用某个工具或库时,遇到了错误或者不明白的地方。这时候,大家会在一个叫StackOverflow的网站上提问,寻求帮助。
在这个网站上,很多有经验的程序员会分享他们的知识和经验,帮助那些刚入门的朋友。提问时,最好把问题描述清楚,提供一些相关的代码,这样别人才能更好地理解你的问题,并给出有效的建议。
总之,StackOverflow是一个很好的学习和交流的平台,适合所有想要提升编程技能的人。
from tkinter import *
from tkinter.tix import *
root = Tk()
MyButtn = Button(root, text="Hello")
MyButtn.grid()
ToolTp = Balloon()
ToolTp.bind_widget(MyButtn, balloonmsg="My ToolTip example")
root.mainloop()
2
你的代码里有个错误。你现在的代码是这样的:
def enter(event): root.after(500,show(event))
但是,传给 after
的参数应该是一个函数的引用,而不是一个实际调用的函数。你需要把它改成这样:
def enter(event): root.after(500,show,event)
发生的事情是这样的:当你写 root.after(500, show(event))
时,首先执行的是 show(event)
,这会在调用 after
之前就运行。这个函数运行的结果是 None
,然后这个 None
被用作 after
的参数,这样就变成了 root.after(500, None)
。这会导致你的整个图形界面在半秒钟内都处于“睡眠”状态。在这段时间里,它无法响应任何事件,所以你看不到动画效果。