国外有篇关于glade创建UI的文章不错,本文大致按那个示例,自己动手做一遍.
https://prognotes.net/2016/03/gtk-3-c-code-hello-world-tutorial-using-glade-3/
https://prognotes.net/gtk-glade-c-programming/
1,实验效果
2,安装glade
sudo apt-get install glade3,工程
点击左上角的创建图标创建一个glade工程,然后选择右上的save保存,起个名字,我这里定义为glade_hello_world.
4,窗口
选择第一个GtkWindow,单击后工作区生成窗口,有点属性菜单选择General选项卡,ID定义为: window_main.
5,容器
选择GtkFixed,拖放到窗口中,全填充.
6,标签
选择GtkLable,拖两个lable到GtkFixed容器里,分别定义两个lable的ID为: lbl_hello, lbl_count.
7,按钮
选择第一个GtkButton,定义ID为: btn_hello.
左下角有个调整位置的按钮,调整一下这3个控件的位置,让他们看起来比较美观.
8,代码
glade_hello_world.c
#include <gtk/gtk.h> GtkWidget *g_lbl_hello; GtkWidget *g_lbl_count; int main(int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *window; gtk_init(&argc, &argv); builder = gtk_builder_new(); gtk_builder_add_from_file (builder, "glade_hello_world.glade", NULL); window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main")); gtk_builder_connect_signals(builder, NULL); // get pointers to the two labels g_lbl_hello = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_hello")); g_lbl_count = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_count")); g_object_unref(builder); gtk_widget_show(window); gtk_main(); return 0; } // called when button is clicked void on_btn_hello_clicked() { static unsigned int count = 0; char str_count[30] = {0}; gtk_label_set_text(GTK_LABEL(g_lbl_hello), "Hello, world!"); count++; sprintf(str_count, "%d", count); gtk_label_set_text(GTK_LABEL(g_lbl_count), str_count); } // called when window is closed void on_window_main_destroy() { gtk_main_quit(); }注意,第14行,定义成你创建的glade项目的名称,上边我定义的是glade_hello_world.glade,所以这里写那个.
9,信号
根据上面的代码,我们需要创建两个信号,分别是on_btn_hello_clicked(), on_window_main_destroy().
9.1, button信号
选择button,右边属性菜单选择Signal --> GtkButton --> clicked --> handler --> on_btn_hello_clicked,如下图:
9.2, Window信号
选择根window,右边属性菜单选择Signal --> GtkWidget --> destory --> on_window_main_destroy,如下图:
保存工程.
10,编译验证
gcc -o glade_hello_world glade_hello_world.c `pkg-config --libs --cflags gtk+-3.0` -export-dynamic第一次按下button,第一个标签lbl_hello会显示hello,world!,每按下一次button第二个标签lbl_count的数值就会+1.