Python 检测tkinter中帧的``和``事件

Python 检测tkinter中帧的``和``事件,python,tkinter,Python,Tkinter,我有一个菜单,当用户移动鼠标离开时,我想消失。菜单由一个框架组成,框架中包含多个标签/按钮小部件。我可以通过简单地绑定到/来检测用户将鼠标从标签/按钮上移开,如果您只是试图简化对小部件回调的维护,那么我认为将事件绑定到包含帧不是最好的方法。我想可以在按钮和标签的回调中生成虚拟事件,并将虚拟事件绑定到框架,但这似乎相当复杂。也许那只是因为我没有虚拟活动的经验 为什么不将标签和按钮小部件子类化?看看前面的实例和类绑定标题,然后您只需要维护两个类绑定,一个用于标签,一个用于按钮。这对我来说似乎更干净;

我有一个菜单,当用户移动鼠标离开时,我想消失。菜单由一个框架组成,框架中包含多个标签/按钮小部件。我可以通过简单地绑定到/来检测用户将鼠标从标签/按钮上移开,如果您只是试图简化对小部件回调的维护,那么我认为将事件绑定到包含帧不是最好的方法。我想可以在按钮和标签的回调中生成虚拟事件,并将虚拟事件绑定到框架,但这似乎相当复杂。也许那只是因为我没有虚拟活动的经验

为什么不将标签和按钮小部件子类化?看看前面的实例和类绑定标题,然后您只需要维护两个类绑定,一个用于标签,一个用于按钮。这对我来说似乎更干净;只是香草味的哦


希望这能有所帮助。

我找到了一个简单的方法来解决你的问题,我也在尝试着做同样的事情

def function2(event):
    -revert event-
    Widget.bind("<Enter>", function1)
def function1(event):
    -hover event-
    Widget.bind("<Leave>", function2)
Widget.bind("<Enter>", function1)

这有点愚蠢,这不是最好的,但这只是意味着当你悬停时,它会做它想做的事情,然后侦听还原它的事件,在这种情况下。

发布代码片段会有所帮助。如果标签完全覆盖了框架,我不明白为什么你还需要绑定到框架。你想发生什么事而没有发生?顺便提一下如果愿意,可以简化绑定语法:lbl_1.bindstayopenfunction@saulspatz我实际上有几个标签/按钮,我还没有决定是否需要这两种类型,因此这些事件需要绑定到每一个-这也意味着如果我想更改调用的函数,我必须确保为每一个更改它。您的绑定按预期为我工作,即:框架上的事件适当着火。你知道你的菜单没有填满整个窗口吗?它紧贴标签,所以几乎不可能。@BryanOakley我希望有一种方法可以让事件传播到它们的父级,就像javascript中的onclick事件可以捕获或冒泡一样。我意识到框架紧贴标签,但在进入/离开框架覆盖的区域时,我一直在寻找要触发的进入/离开事件,即使顶部有其他东西,这是最接近我所寻找的。事实上,我最后给主窗口分配了一个事件,以便在单击退出菜单时关闭菜单。因此,当用户在菜单外单击时,菜单将关闭,而不是像Windows中的开始按钮那样离开菜单
def function2(event):
    -revert event-
    Widget.bind("<Enter>", function1)
def function1(event):
    -hover event-
    Widget.bind("<Leave>", function2)
Widget.bind("<Enter>", function1)