鼠标悬停在窗口上时显示按钮时遇到问题。当我越过窗口时,按钮出现。但当我翻过按钮时,它再次隐藏起来。但是,当我尝试用一个简单的程序重新创建问题时,它工作得很好......但是在短版本中还有其他一些问题。
import Tkinter as TK
root = TK.Tk()
root.geometry("400x300")
root.overrideredirect(True)
button = TK.Button(root, text = "HI", command = lambda: root.destroy())
def Show(event):
button.place(x = 0, y = 0, width = 60, height = 30)
def Hide(event):
button.place_forget()
root.bind("<Enter>", Show)
root.bind("<Leave>", Hide)
root.mainloop()
此简短版本有效。但当你翻过按钮然后远离它时,它会隐藏起来。即使你仍然在根窗口之上。是否有任何简单的方法可以强制按钮在鼠标上方始终可见?感谢
答案 0 :(得分:3)
你Enter
和Leave
个事件会触发两次(在根窗口和按钮上),因为当你Enter
按钮小部件 - 你Leave
root时,所以要解决问题您可以查看widget.master
,如果没有主人就行动。
try:
import tkinter as TK
except ImportError:
import Tkinter as TK
root = TK.Tk()
root.geometry("400x300")
root.overrideredirect(True)
button = TK.Button(root, text="HI", command=root.destroy)
def Show(event):
print('Show event triggered by %s' % event.widget.__class__)
print('Master container is %s' % event.widget.master)
if event.widget.master is None:
button.place(x=0, y=0, width=60, height=30)
def Hide(event):
print('Hide event triggered by %s' % event.widget.__class__)
print('Master container is %s' % event.widget.master)
if event.widget.master is None:
button.place_forget()
root.bind("<Enter>", Show)
root.bind("<Leave>", Hide)
root.mainloop()
答案 1 :(得分:1)
您可以检查您的鼠标事件是在根框架之外还是在根框架内,并采取相应措施
git push live master