我有一个菜单,当用户将鼠标移开时,我想消失。该菜单包含一个Frame
,其中包含几个Label
/Button
小部件。我可以检测到用户将他们的鼠标移出Label
/Button
,只需绑定这些事件的<Enter>
/<Leave
事件即可。但绑定到框架的相同事件从不触发 - 我猜是因为顶部的小部件掩盖了框架,所以鼠标永远不会进入它?检测'<Enter>`和`<Leave>`在tkinter中的帧事件
他们的方式是让事件传播到包含Frame
?
window=tkinter.Tk()
menu_frm = tkinter.Frame(window, name="menu_frm")
lbl_1 = tkinter.Label(menu_frm, text="Label", name="lbl_1")
lbl_1.pack()
lbl_2 = tkinter.Label(menu_frm, text="Label", name="lbl_2")
lbl_2.pack()
menu_frm.pack()
# These two (per label and the number of labels is likely to grow) events fire
lbl_1.bind("<Enter>", lambda _: stayopenfunction())
lbl_1.bind("<Leave>", lambda _: closefunction())
lbl_2.bind("<Enter>", lambda _: stayopenfunction())
lbl_2.bind("<Leave>", lambda _: closefunction())
# These two events do not fire
menu_frm.bind("<Enter>", lambda _: stayopenfunction())
menu_frm.bind("<Leave>", lambda _: closefunction())
发布代码片段将有所帮助。 –
如果标签完全覆盖了框架,我不明白你为什么需要绑定到框架。你想发生什么事情没有发生?顺便说一句,你可以简化你的绑定语法,如果你喜欢:'lbl_1.bind(“”stayopenfunction)' –
saulspatz
@saulspatz我实际上有几个标签/按钮(我还没有决定是否我需要这两种类型呢)和所以这些事件需要绑定到每一个 - 这也意味着,如果我想改变称为的功能,我必须确保我为每一个改变它。 – Kvothe