c - 如何在gtk3中获得2个文本输入

标签 c text user-input gtk3

我已经在谷歌上搜索两周了。 网格中的 2 个文本输入。 (例如:用户名、密码) Glade 让我设计没问题...

对于一个文本输入小部件,它可以工作。

我正在使用 mysql 进行编译/链接 所以我想调用函数,存储过程 与条目1和条目2。

请帮忙 谢谢

:编辑: 2019年5月4日15:18

我找到了一个决定性的解决方案。 (但它抛出了段错误) 代码如下:

这是某种将视频转录为文本的内容(C 代码)。

https://www.youtube.com/watch?v=_yTmW1QG3uk

显然确实符合我的目标......

这有点工作,但假设你想使用相同的 第二次实例,“段错误”

我确信我会找到问题(gtk_main_quit)之类的, 但文本输入多行已解决:P

这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <mysql/mysql.h>


GtkEntry *userid, *password;

static void Button_Pressed(GtkWidget *w, gpointer *data){

/*   char *userid, *password;*/  //seg fault

/*   userid[0]='\0';
   password[0]='\0';*/

   userid=gtk_entry_get_text(userid);
   password=gtk_entry_get_text(password);


   g_print("%s\n\r%s\n\r",userid, password);

}

static void CreateWindow(GtkApplication *myapp, gpointer *user_data){

   GtkWidget *window;

   window=gtk_application_window_new(myapp);
   gtk_window_set_title(GTK_WIDGET(window), "Double Entry Solution");
   gtk_window_set_default_size(GTK_WINDOW(window),400,400);

   GtkWidget *vbox=gtk_vbox_new(FALSE,0);
   gtk_container_add(GTK_CONTAINER(window), vbox);
   gtk_widget_show(vbox);


   // userid pack
   userid=gtk_entry_new();
   gtk_box_pack_start(GTK_CONTAINER(vbox), userid, TRUE, TRUE,0);
   gtk_widget_show(userid);


   GtkWidget *hbox=gtk_hbox_new(TRUE,0);
   gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);

   // password pack
   password=gtk_entry_new();
   gtk_box_pack_start(GTK_BOX(hbox), password, TRUE, TRUE,0);
   gtk_widget_show(password);

   GtkWidget *submit=gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
   gtk_box_pack_start(GTK_BOX(vbox), submit, TRUE, TRUE,0);

   GtkWidget *button=gtk_button_new_with_label("Login");
   g_signal_connect(button, "clicked", G_CALLBACK(Button_Pressed), NULL);
   gtk_container_add(GTK_CONTAINER(submit), button);
   gtk_widget_show(button);



   gtk_widget_show_all(window);

}


int main(int argc, char** argv){

   GtkApplication *doubleentry;


   doubleentry=gtk_application_new("smdelectro.business.site.doubleentry", G_APPLICATION_FLAGS_NONE);

   g_signal_connect(doubleentry, "activate", G_CALLBACK(CreateWindow), NULL);


   g_application_run(G_APPLICATION(doubleentry), argc, argv);
   g_object_unref(doubleentry);




   return (EXIT_SUCCESS);
}

最佳答案

下面的代码有效:

#include <gtk/gtk.h>

int main(int argc, char **argv)
{
    // Init
    gtk_init(&argc,&argv);
    // Create widgets
    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    GtkGrid *grid     = GTK_GRID(gtk_grid_new());
    // Attach entries
    gtk_grid_attach(grid,gtk_entry_new(),0,0,1,1);
    gtk_grid_attach(grid,gtk_entry_new(),0,1,1,1);
    // Add the grid in the window
    gtk_container_add(GTK_CONTAINER(window),GTK_WIDGET(grid));
    // Dirty way to force clean termination when window is closed
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    // Show **everythings** (not only the window)
    gtk_widget_show_all(window);
    // Main loop
    gtk_main();
    return 0;
}

没有任何源代码,我无法提供更多帮助,请您发布它。

GTK+3 中的一个常见陷阱是创建小部件而不显示它们。如果将 gtk_widget_show_all 替换为 gtk_widget_show,您将看到一个没有小部件的窗口,它们位于此处但未显示,因为默认情况下设置了 visible 属性为FALSE

关于c - 如何在gtk3中获得2个文本输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982908/

相关文章:

c - 如何在rabbitmq-c中使用扇出交换?

c - 强制每 1 秒调用一次警报处理程序(在 C 中)

java - 在java中从命令行读取用户输入的正确方法

java - 用户创建的新类(class)?

python - 哪些Python贝叶斯文本分类模块类似于dbacl?

java - 使用扫描仪读取一行上的多个数字

c++ - 编译问题 gtk+

c - 指针和 getstring 函数

python - Python 中的处理/提取

internet-explorer - IE 中不换行(flexbox)