我有这样的代码:
...
entry.KeyPressEvent += EntryKeyPressEvent;
...
}
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
...
}
按下大多数键时调用EntryKeyPressEvent,但不返回返回键。这是为什么?
编辑:当按下大多数键时,实际上没有调用它。有些人称之为(例如,向上,向下,逃跑),但大多数人没有(例如任何字母键,返回)。
作为参考,我正在尝试移植看起来像这样的PyGTK代码:
...
entry.connect('key_press_event', self.entry_key_pressed)
...
def entry_key_pressed(self, widget, event):
...
答案 0 :(得分:3)
我能够从this mailing list thread找到它。我所要做的就是将ConnectBefore
属性应用于处理程序方法:
[ConnectBefore]
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
...
}
答案 1 :(得分:2)
来自PyGTK常见问题解答:
键盘事件的处理方式不同。当您的窗口收到键盘事件时,它首先被调度到顶层窗口,该窗口将检查它是否与任何键盘快捷键匹配。如果按键与快捷键不匹配,则会将事件分派给当前具有焦点的子窗口小部件。
简而言之:您的Gtk.Entry没有看到按键事件信号,因为顶级窗口正在使用它(即激活当前选定的小部件)。
一个元回答:通常,搜索其他语言的GTK文档非常有用。
答案 2 :(得分:0)
您是否尝试验证输入?焦点离开输入框时会引发焦点输出事件 - 就像用户点击Enter键一样。