GtkEntry没有得到键盘输入

时间:2013-03-14 02:01:27

标签: c gtk gtk3

我有以下GTK3代码:

(...)
cmd_bar = gtk_entry_new();
gtk_editable_set_editable(GTK_EDITABLE(cmd_bar), TRUE);
gtk_entry_set_visibility(GTK_ENTRY(cmd_bar), TRUE);
gtk_widget_grab_focus(GTK_WIDGET(cmd_bar));
gtk_grid_attach (GTK_GRID (grid), GTK_WIDGET(cmd_bar), 0, 1, 2, 1);
gtk_widget_show(cmd_bar);
(...)

它正确显示GtkEntry,但它没有显示键盘的任何输入。如果我粘贴一些字符串就会被正常接受。

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

根据GtkWidget documentation

  

[gtk_widget_grab_focus]使小部件具有GtkWindow的键盘焦点   内。 widget必须是可集中的小部件,例如GtkEntry;   像GtkFrame这样的东西不起作用。

     

更确切地说,它必须设置GTK_CAN_FOCUS标志。使用   gtk_widget_set_can_focus()修改该标志。

     

小部件也需要实现和映射。这表示为   相关信号。 创建后立即抓住焦点   小部件可能会失败并导致严重警告

有关实现地图的说明,请检查"Those “realize” & “map” widget signals"

答案 1 :(得分:0)

当我将我的应用程序从 GTK3 移植到 GTK4 时,我遇到了同样的问题,同样的行为,我能够在条目中粘贴和剪切文本,但无法聚焦或使用键盘自由插入文本。

在我的 GTK3 应用程序中,我已经在我的模板中错误地将“can-focus”属性设置为“False”(使用glade),并且在移植到 GTK4 时,它们似乎导致了问题。 起初我不认为“can-focus”属性可能是问题,因为我的 GtkEntry 将它设置为 TRUE,问题是其中一个父容器的值设置为 FALSE。

希望这也是您的问题,如果不是希望它是其他人的解决方案。