Почему нажатие клавиши возврата не вызывает KeyPressEvent в моем Gtk.Entry?

2

У меня такой код:

    ...

    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):
    ...
Теги:
gtk
gtk#

3 ответа

3
Лучший ответ

Я смог понять это из этот поток списка рассылки. Все, что мне нужно было сделать, это применить атрибут ConnectBefore к методу обработчика:

[ConnectBefore]
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
    ...
}
  • 0
    Ах! Так что Gtk.Entry ела эти события нажатия клавиш! Странно, что в Python такого не было.
2

Из PyGTK FAQ:

События клавиатуры обрабатываются по-разному. Когда ваше окно получает событие клавиатуры, оно сначала отправляется в окно верхнего уровня, которое проверяет, соответствует ли оно любым сочетаниям клавиш. Если нажатие клавиши не соответствует ярлыку, то событие отправляется дочернему виджету, который в настоящее время имеет фокус.

Вкратце: ваш Gtk.Entry не видит сигнал нажатия клавиши-события, потому что окно верхнего уровня что-то делает с ним (а именно, активирует выбранный виджет).

Мета-ответ: часто, поиск документов на других языках GTK на удивление полезен.

  • 0
    Странно то, что я портирую код PyGTK, и он работает в PyGTK. Я отредактирую свой оригинальный вопрос, чтобы включить рабочий код Python.
0

Вы пытаетесь проверить ввод? Фокусировочное событие срабатывает как фокус, оставляет поле ввода - например, когда пользователь нажимает Enter.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню