gpt4 book ai didi

c - GTK Linux C 通过按钮小部件从输入框获取输入

转载 作者:行者123 更新时间:2023-11-30 18:31:58 25 4
gpt4 key购买 nike

我有一张 table ,里面装满了输入框、标签和按钮。

目前,如果我编译代码,我可以从文本框中获取输入,但前提是用户按下 Enter 键,并且文本仅来自他们当前正在输入的框中。

我希望在按下“登录”按钮时能够从两个文本框中获取输入。我尝试使用与输入框中的输入键相同的回调函数,但 GTK 给了我一个错误。

如果有人可以向我展示一些代码,允许我从表内的输入框获取文本(我知道从表和 v/框检索数据的方法是不同的),我将不胜感激,因为我似乎在任何教程中都找不到它。

将更新工作代码。

尝试将状态栏附加到表格时出错:

(条目:5526):Gtk-CRITICAL **:gtk_table_attach:断言“child->parent == NULL”失败

(条目:5526):GLib-GObject-警告 **:从 GtkTable' 到 GtkStatusbar' 的转换无效

最佳答案

您的回调函数(名为 callback )需要访问两个 GtkEntry 小部件才能获取它们的值。有多种方法可以实现这一点。许多 GTK C 程序使用全局变量或具有文件作用域的全局变量(即在文件内任何函数之外声明为 static 的变量)。

删除您的entry1entry2任何函数之前靠近文件顶部的变量:

static GtkWidget *entry1 = 0;
static GtkWidget *entry2 = 0;

然后像这样修改回调:

/* Our callback.
* The data passed to this function is printed to stdout */
static void callback( GtkWidget *widget, gpointer data)
{
const gchar *entry_text1;
const gchar *entry_text2;

g_print ("Hello again - %s was pressed\n", (char *) data);

entry_text1 = gtk_entry_get_text (GTK_ENTRY (entry1));
entry_text2 = gtk_entry_get_text (GTK_ENTRY (entry2));
g_print ("Contents of entries:\n%s\n%s\n", entry_text1, entry_text2);
}

您还应该对 enter_callback 进行类似的修改函数,并且不要忘记删除 GtkWidget指向 GtkEntry 的指针来自main .

<小时/>

作为使用(静态)全局变量的替代方法,创建一个数据结构来保存条目:

typedef struct login_data
{
GtkWidget *entry1;
GtkWidget *entry2;
} login_data;

然后将其传递给回调(而不是像以前一样的文本字符串),并且回调将像这样更改:

static void callback( GtkWidget *widget, gpointer data)
{
login_data* ld = (login_data*)data;
const gchar *entry_text1;
const gchar *entry_text2;

entry_text1 = gtk_entry_get_text (GTK_ENTRY (ld->entry1));
entry_text2 = gtk_entry_get_text (GTK_ENTRY (ld->entry2));
g_print ("Contents of entries:\n%s\n%s\n", entry_text1, entry_text2);
}

动态分配数据结构以防止其超出范围(在简单应用程序中并非严格必要),并且这是在使用 g_signal_connect 之前完成的将回调连接到条目:

login_data* ld = g_malloc(sizeof(*ld));

// callback function to execute when login is clicked
g_signal_connect (LoginButton, "clicked", G_CALLBACK (callback), (gpointer) ld);

使用此方法,您必须将所有引用更改为 entry1entry2ld->entry1ld->entry2 。最后,在程序退出之前,您应该调用 g_free在动态分配的结构上,即 g_free(ld) .

顺便说一句,对于这个程序,您不需要两个单独的回调,删除 enter_callback只需使用 callback对于两者。

关于c - GTK Linux C 通过按钮小部件从输入框获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com