如何在 GtkEntry 中捕获 Enter 按键

Posted

技术标签:

【中文标题】如何在 GtkEntry 中捕获 Enter 按键【英文标题】:How to capture Enter key press in GtkEntry 【发布时间】:2011-12-15 13:03:28 【问题描述】:

我试图在GtkEntry 中按下 Enter 键。我发现的大多数资源都建议连接到activate 信号,但documentation for GtkEntry 状态(强调我的):

应用程序不应连接到它,但可能会发出它 g_signal_emit_by_name() 如果他们需要控制激活 以编程方式。

我很好奇这背后的基本原理以及普遍接受的替代方案是什么。我知道我可以连接到key-press-event 信号并检查密钥代码,但我想知道是否有更优雅的解决方案。

【问题讨论】:

我很清楚文档所说的内容,但我一直在使用,到目前为止还没有出现任何问题。如果我是你,我会使用并通过测试找出是否不起作用。虽然您可以检查 GtkEntry 源代码后面的代码,看看它是否不符合您的需求。 【参考方案1】:

这是一个键绑定信号。这意味着 GTK 已设置为当您在条目中按 Enter 时,会发出信号。如果您想模拟Enter,它也可以通过编程方式发出,因此不能保证信号实际上是按键的结果。

如果你想捕捉按键,那么最好的方法是连接到key-press-event

也就是说,我不明白你为什么不能使用activate 信号。大多数键绑定信号不应连接到,但这似乎是有道理的。我认为你应该在 gtk-devel 邮件列表上要求澄清,或者在 bugzilla.gnome.org 上提交一个错误,说应该澄清这个信号的文档。

【讨论】:

完成了。感谢您的答复。 bugzilla.gnome.org/show_bug.cgi?id=666364【参考方案2】:

上述激活信号的 GtkEntry 文档:

应用程序不应连接到它,但可能会发出它 g_signal_emit_by_name() 如果他们需要控制激活 以编程方式。

...已更改为:

虽然此信号用作键绑定信号,但它也通常用于 应用程序用来拦截条目的激活。

这发生在 2012 年 6 月 11 日,提交 4a25bac0e7685000fff90a211db6ac60f6b74ab1。提交信息是:

更新 GtkEntry::activate 的文档

删除“您不得连接” 来自这个信号的消息。虽然它是一个键绑定信号,但使用它 from applications 很好,实际上是预期的。

【讨论】:

以上是关于如何在 GtkEntry 中捕获 Enter 按键的主要内容,如果未能解决你的问题,请参考以下文章

在 JS/JQuery 中按 ENTER 键之前,如何仅捕获您在文本区域中输入的行? [复制]

PyQt双用途ENTER按键

Android EditText 捕获KEYCODE_ENTER后按下Del键无法正常退格?

如何将 GtkEntry 小部件设置为仅使用 C 接受数字?

jQuery:如何在文本框中捕获 TAB 按键

如何在Matlab uipanel中捕获按键