2012-01-10 12 views
1

PyGTKアプリケーションでは、マウスポインタがトップレベルウィンドウを離れるときを検出したいと思います。マウスは、それがトップレベルウィンドウを残していない場合は、ウィンドウ内のウィジェットに入ったときにコールバックがトリガーされるだけしかしpygtkウィンドウを残してマウスを検出

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

答えて

3

あなたの問題は、ポインタが下位ウィジェットに入ったとき、GTKでは技術的にもウィンドウを離れてしまっていることです。これがあなたが経験している奇妙な動作の理由です。 (ところで、私のpythonで絶対に経験がないが、私はそれを理解できるようしようとするでしょう。)

あなたのコールバック関数ヘッドは次のようになりべき:

def window_exit(widget, event, user_data) 

イベントがあるため、非常に重要ですその変数 'event.detail'は、どのような休暇イベントが発生したかを正確に示しています。あなたの場合、 'gtk.gdk.NOTIFY_NONLINEAR'と等しいかどうかテストします。これは、ポインタが "本当に"ウィンドウを離れたことを意味するためです。

だから、あなたはおそらく、あなたのコールバック関数の先頭に

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

のようなものを置く必要があります。 (私はPythonを知らないので、構文が正確ではないかもしれません)

+0

「劣等ウィジェット」に入るケースを無視しても問題ありません。しかし、コールバック関数は、マウスがトップレベルのウィンドウを離れるときに呼び出されるgetttingではありません(Windows XPでは少なくとも) – OJW

+0

@OJWああ、申し訳ありませんが、これはLinux上で私のために働いています。それで? – Ancurio

関連する問題