2

我有以下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正确,但不显示来自键盘的任何输入。如果我粘贴一些字符串,它会被正常接受。

我该如何解决这个问题?

4

2 回答 2

1

根据GtkWidget 文档

[gtk_widget_grab_focus]使小部件在其内部具有键盘焦点GtkWindowwidget必须是可聚焦的小部件,例如GtkEntry; 像这样的东西是GtkFrame行不通的。

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

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

有关实现映射的说明,请查看那些“实现”和“映射”小部件信号

于 2013-03-15T22:25:00.577 回答
1

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

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

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

于 2021-05-09T07:43:10.750 回答