问题描述
我用tkinter做了一个简单的工具提示,并添加了淡入淡出效果,但是代码有问题:
import tkinter as tk
import time
class ToolTips():
def __init__(self,widget,text,triggerkey='<Enter>',releasekey='<Leave>'):
self.widget = widget
self.text = text
self.bg = '#ffffe0'
self.widget.bind(triggerkey,self.add)
self.widget.bind(releasekey,self.remove)
self.widget.bind('<ButtonPress>',self.remove)
def add(self,event):
self.master = tk.Toplevel(bg=self.bg)
self.master.geometry(f'+{event.x_root}+{event.y_root}')
self.master.overrideredirect(1)
self.master.attributes('-topmost',True)
self.frame = tk.Frame(self.master,bg=self.bg,highlightbackground="black",highlightcolor="black",highlightthickness=1)
self.frame.pack()
self.label = tk.Label(self.frame,text=self.text,justify=tk.LEFT)
self.label.pack(padx=1,pady=3)
def remove(self,*args):
alpha = self.master.attributes('-alpha')
if alpha > 0:
alpha -= 0.5
self.master.attributes('-alpha',alpha)
self.master.after(100,self.remove)
else:
self.master.destroy()
#USAGE OF CLASS
root = tk.Tk()
l = tk.Label(root,text='Hover',font=('hevletica',21))
l.pack()
l.focus_force()
obj = ToolTips(l,text='There is alot more to this? Are you curIoUs?\nBla Bla...')
root.mainloop()
这里remove()
应该会产生淡入淡出的效果,但是它并不干净,有时如果您离开标签并输入标签的时间超过100毫秒,那么工具提示不会被破坏并且会一直存在直到应用程序完全退出。因此,是否有任何简单的方法(如果没有)来实现此工具提示的平滑淡入淡出。也可以随时指出代码中的其他错误:)
答案here具有淡入淡出的效果,但是我似乎无法用我的代码实现它。
预先感谢:D
解决方法
尝试使用selected_a = 0
selected_b = 0
q1 = input('''
Question 1
a) Yes
b) No
''')
q2 = input('''
Question 2
a) Yes
b) No
''')
q3 = input('''
Question 3
a) Yes
b) No
''')
if q1 or q2 or q3 == 'a':
selected_a += 1
else:
selected_b += 1
if selected_a < 2
print('Sample a')
。
为了提高效率,每次将鼠标悬停在文本上时都无需创建after_cancel
。只需将Toplevel
设置为0。
-alpha
,
您遇到的问题是在确保最后一个销毁之前创建了一个新的工具提示。因此,有时您的参考文献可能会松散。为了避免这种情况,您需要跟踪最新消息并在制作新消息之前销毁它。
import tkinter as tk
import time
class ToolTips():
def __init__(self,widget,text,triggerkey='<Enter>',releasekey='<Leave>'):
self.widget = widget
self.text = text
self.bg = '#ffffe0'
self.widget.bind(triggerkey,self.add)
self.widget.bind(releasekey,self.remove)
self.widget.bind('<ButtonPress>',self.remove)
self.recent = None
def add(self,event):
if self.recent != None:
self.recent.destroy()
self.master = tk.Toplevel(bg=self.bg)
self.master.geometry(f'+{event.x_root}+{event.y_root}')
self.master.overrideredirect(1)
self.master.attributes('-topmost',True)
self.frame = tk.Frame(self.master,bg=self.bg,highlightbackground="black",highlightcolor="black",highlightthickness=1)
self.frame.pack()
self.label = tk.Label(self.frame,text=self.text,justify=tk.LEFT)
self.label.pack(padx=1,pady=3)
self.recent=self.master
def remove(self,*args):
alpha = self.master.attributes('-alpha')
if alpha > 0:
alpha -= 0.5
self.master.attributes('-alpha',alpha)
self.master.after(100,self.remove)
else:
self.master.destroy()
#USAGE OF CLASS
root = tk.Tk()
l = tk.Label(root,text='Hover',font=('hevletica',21))
l.pack()
l.focus_force()
obj = ToolTips(l,text='There is alot more to this? Are you curious?\nBla Bla...')
root.mainloop()