检测鼠标离开pygtk窗口

检测鼠标离开pygtk窗口,gtk,pygtk,gdk,Gtk,Pygtk,Gdk,在PyGTK应用程序中,我想检测鼠标指针何时离开顶层窗口 window = gtk.Window(gtk.WINDOW_TOPLEVEL) ... window.connect("leave-notify-event", window_exit, "") 然而,只有当鼠标进入窗口内的小部件时才会触发回调,而不是离开顶级窗口时?您的问题是,当指针进入较低级别的小部件时,在GTK中,从技术上讲,它也会离开窗口,这就是您所经历的奇怪行为的原因。 (顺便说一句,我绝对没有python方面的经验,但我会

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

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

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

您的问题是,当指针进入较低级别的小部件时,在GTK中,从技术上讲,它也会离开窗口,这就是您所经历的奇怪行为的原因。 (顺便说一句,我绝对没有python方面的经验,但我会尽量让人理解)

您的回调函数头应该如下所示:

def window_exit(widget, event, user_data)
事件非常重要,因为它的变量“event.detail”准确地告诉我们发生了什么样的休假事件。在您的例子中,您希望测试它是否等于“gtk.gdk.NOTIFY_NONLINEAR”,因为这意味着指针“真的”离开了窗口

所以,你可能应该把

if (event.detail != gtk.gdk.NOTIFY_NONLINEAR)  { return; }

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

您的问题是,当指针进入一个劣质的小部件时,在GTK中,从技术上讲它也会离开窗口,这就是您正在经历的奇怪行为的原因。 (顺便说一句,我绝对没有python方面的经验,但我会尽量让人理解)

您的回调函数头应该如下所示:

def window_exit(widget, event, user_data)
事件非常重要,因为它的变量“event.detail”准确地告诉我们发生了什么样的休假事件。在您的例子中,您希望测试它是否等于“gtk.gdk.NOTIFY_NONLINEAR”,因为这意味着指针“真的”离开了窗口

所以,你可能应该把

if (event.detail != gtk.gdk.NOTIFY_NONLINEAR)  { return; }

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

好的,当它进入“劣质小部件”时,忽略这些情况是没有问题的。但是,当鼠标离开顶级窗口时(至少在Windows XP中),回调函数根本不会被调用@OJW哦,对不起,这在Linux上对我很有效。。也许这是一个bug?好吧,当它进入一个“劣质的小部件”时,忽略这些情况是没有问题的。但是,当鼠标离开顶级窗口时(至少在Windows XP中),回调函数根本不会被调用@OJW哦,对不起,这在Linux上对我很有效。。那可能是虫子吧?