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を知らないので、構文は正確ではないかもしれません)