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

Posted

技术标签:

【中文标题】如何将 GtkEntry 小部件设置为仅使用 C 接受数字?【英文标题】:How to set GtkEntry widget to only accept numbers using C? 【发布时间】:2019-04-28 15:54:42 【问题描述】:

我正在尝试从用户那里获得 4 位输入,但不接受非数字输入。除了检查非数值,我可以允许用户只在 GtkEntry 框中输入数值吗?

GtkWidget *entry_pin;
entry_pin=gtk_entry_new();
gtk_entry_set_max_length (GTK_ENTRY(entry_pin),4);

顺便说一句,我在 Ubuntu 上运行。

【问题讨论】:

【参考方案1】:

另一种方法是在回调中停止发射

#include <ctype.h>

void insert_text_event(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)

    int i;

    for (i = 0; i < length; i++) 
        if (!isdigit(text[i])) 
            g_signal_stop_emission_by_name(G_OBJECT(editable), "insert-text");
            return;
        
    

回调可以设置为:

g_signal_connect(G_OBJECT(widget), "insert-text", G_CALLBACK(insert_text_event), NULL);

【讨论】:

非常感谢,正是我需要的!!【参考方案2】:

最简单的方法是切换到GtkSpinButton 小部件。这将允许您设置numeric only。然后可以设置用户可以使用的range of values。

【讨论】:

谢谢,工作但不是我想要的

以上是关于如何将 GtkEntry 小部件设置为仅使用 C 接受数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 QTableWidget 设置为仅允许按标题选择?

GTK3 使用带有 ID 的 CSS 从 GtkEntry 中删除蓝框

GTK 输入输入信号

尝试添加第二个主屏幕小部件后,PendingIntents 不会触发

如何通过 VSCode 和 python 使用 blender 将 2D 小部件与 3D 模型集成

如何将 QStackedWidget 大小设置为子小部件的最小尺寸?