2012-01-10 100 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