2012-01-10 101 views
1

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

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

但是,只有鼠标在窗口内进入窗口小部件时,才会触发回调,而不是在离开顶层窗口时触发回调?

回答

3

你的问题是,当指针进入下一个小部件时,在GTK中,它在技术上也会离开窗口,这就是你遇到奇怪行为的原因。 (顺便说一句我有蟒蛇完全没有经验,但我会尽量做到理解)

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

def window_exit(widget, event, user_data) 

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

所以,你应该把类似

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

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

+0

好吧,我没有任何问题,当它进入“下层控件”时忽略这些情况。但是,当鼠标离开顶层窗口(至少在Windows XP中)时,回调函数根本不会被调用。 – OJW 2012-01-10 15:52:43

+0

@OJW哦,对不起,这在Linux上适用于我..也许这是一个bug然后? – Ancurio 2012-01-10 18:09:11