检测鼠标离开pygtk窗口

时间:2012-01-10 12:00:08

标签: gtk pygtk gdk

在PyGTK应用程序中,我想检测鼠标指针何时离开我的顶级窗口。

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
...
window.connect("leave-notify-event", window_exit, "")

然而,只有在鼠标进入窗口内的窗口小部件时才触发回调,而不是在它离开顶级窗口时触发?

1 个答案:

答案 0 :(得分:4)

你的问题是,当指针进入下方的小部件时,在GTK中技术上也离开了窗口,这就是你遇到的奇怪行为的原因。 (顺便说一句。我对python没有任何经验,但我会尽量让它变得可以理解)

你的回调函数头应该是这样的:

def window_exit(widget, event, user_data)

事件非常重要,因为它的变量'event.detail'告诉我们究竟发生了什么样的离开事件。在你的情况下,你想测试它是否等于'gtk.gdk.NOTIFY_NONLINEAR',因为这意味着指针已经“真正”离开了窗口。

所以,你应该放点像

这样的东西
if (event.detail != gtk.gdk.NOTIFY_NONLINEAR)  { return; }

位于回调函数的顶部。 (语法可能不完全正确,因为我不知道python)