当鼠标在窗口上时,在Tkinter中显示按钮

时间:2017-03-23 06:50:51

标签: button tkinter mouseover

鼠标悬停在窗口上时显示按钮时遇到问题。当我越过窗口时,按钮出现。但当我翻过按钮时,它再次隐藏起来。但是,当我尝试用一​​个简单的程序重新创建问题时,它工作得很好......但是在短版本中还有其他一些问题。

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()

此简短版本有效。但当你翻过按钮然后远离它时,它会隐藏起来。即使你仍然在根窗口之上。是否有任何简单的方法可以强制按钮在鼠标上方始终可见?感谢

2 个答案:

答案 0 :(得分:3)

EnterLeave个事件会触发两次(在根窗口和按钮上),因为当你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