У меня такой код:
...
entry.KeyPressEvent += EntryKeyPressEvent;
...
}
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
...
}
EntryKeyPressEvent вызывается, когда нажаты большинство клавиш, но не ключ возврата. Почему это?
Изменить: на самом деле не вызывается, когда нажаты большинство клавиш. Некоторые называют это (например, uparrow, downarrow, escape), но большинство из них не выполняет (например, любую буквенную клавишу, возврат).
Для справки, я пытаюсь передать PyGTK-код, который выглядит следующим образом:
...
entry.connect('key_press_event', self.entry_key_pressed)
...
def entry_key_pressed(self, widget, event):
...
Я смог понять это из этот поток списка рассылки. Все, что мне нужно было сделать, это применить атрибут ConnectBefore
к методу обработчика:
[ConnectBefore]
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
...
}
Из PyGTK FAQ:
События клавиатуры обрабатываются по-разному. Когда ваше окно получает событие клавиатуры, оно сначала отправляется в окно верхнего уровня, которое проверяет, соответствует ли оно любым сочетаниям клавиш. Если нажатие клавиши не соответствует ярлыку, то событие отправляется дочернему виджету, который в настоящее время имеет фокус.
Вкратце: ваш Gtk.Entry не видит сигнал нажатия клавиши-события, потому что окно верхнего уровня что-то делает с ним (а именно, активирует выбранный виджет).
Мета-ответ: часто, поиск документов на других языках GTK на удивление полезен.
Вы пытаетесь проверить ввод? Фокусировочное событие срабатывает как фокус, оставляет поле ввода - например, когда пользователь нажимает Enter.