Обнаружить мышь, покидающую окно pygtk - PullRequest
1 голос
/ 10 января 2012

В приложении PyGTK я хотел бы определить, когда указатель мыши покидает мое окно верхнего уровня.

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

Однако этот обратный вызов срабатывает только тогда, когда мышь входит в виджет в окне, а не когда он покидает окно верхнего уровня?

1 Ответ

4 голосов
/ 10 января 2012

Ваша проблема в том, что когда указатель входит в подчиненный виджет, в GTK он также технически покидает окно, что является причиной странного поведения, которое вы испытываете. (Кстати. У меня нет абсолютно никакого опыта работы с python, но я постараюсь сделать его понятным)

Ваша функция обратного вызова должна выглядеть примерно так:

def window_exit(widget, event, user_data)

Событие очень важно, потому что его переменная 'event.detail' точно сообщает нам, какой тип события произошел. В вашем случае вы хотите проверить, равно ли оно «gtk.gdk.NOTIFY_NONLINEAR», потому что это означает, что указатель «действительно» покинул окно.

Итак, вы, вероятно, должны поставить что-то вроде

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

в верхней части функции обратного вызова. (Синтаксис может быть не совсем правильным, так как я не знаю Python)

...