1、认识Glade
3、编写代码
* 这句include就是简单的包含gtk的头文件 *
***********************************************************************/
#include <gtk/gtk.h>
/***********************************************************************
* 从名字就可以看出这是一个button被点击时要执行的函数 *
***********************************************************************/
void on_button_clicked(GtkWidget *widget, gpointer label)
{
/*这是gtk的一个函数,用来给Label设定文字*/
gtk_label_set_text(GTK_LABEL(label),"I Love ABitNo.LinPie.com");
}
int main(int argc, char *argv[])
{
/*这些語句声明了一些组件变量,由于GTK是面向对象的,
所以都可以声明为GtkWidget,这也是习惯作法 */
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *button;
GtkWidget *label;
/*每一个gtk程序都会用到这一句,用来初始化*/
gtk_init(&argc, &argv);
/*这个builder就是用来读取我们用Glade设计的界面的一个东西*/
builder = gtk_builder_new();
/*用下面这个gtk函数把abitno.glade的内容给builder*/
gtk_builder_add_from_file(builder, "abitno.glade", NULL);
/*通过名字从abitno.glade中读取我们需要使用的组件*/
window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
button=GTK_WIDGET(gtk_builder_get_object(builder,"button"));
label=GTK_WIDGET(gtk_builder_get_object(builder,"label"));
/*这是glib里的一个函数,用来把一个组件与一个函数关联起来,下面
这句就是把button和我们上面的那个on_button_clicked给关联了*/
g_signal_connect( G_OBJECT(button), "clicked",
G_CALLBACK(on_button_clicked), (gpointer)label);
/*这条語句就是自动把所有人信号处理函数都关联好*/
gtk_builder_connect_signals(builder, NULL);
/*因为我们已经不需要builder了,就释放builder的空间*/
g_object_unref(G_OBJECT(builder));
/*将window内所有的组件都显示出来,这们我们才能看见*/
gtk_widget_show_all(window);
/*这也是每一个gtk程序都要有的*/
gtk_main();
return 0;
}4、编译运行
当你打开Glade3时,会出现一个Unsaved 1的对话框,这个是让你选择现在这个Project的一些基本属性。这里就按照默认的,不要修改。
我 们来认识下你看到的Glade窗口,最上面是菜单栏,菜单栏下面的是工具栏;左边那列叫Palette,你所需要的组 件都在那里了;中间那个最大的白色空间是你的工作区;右边上部的白色部分叫Inspector,是你添加的组件的一个 导航列表;右边下部是Properties,当你点击了某个组件后,在这里会出现它的属性,你可以对它们进行编辑。
2、设计界面这个应该就不困难了,就是点击Palette里的组件,然后摆放位置,调节属性。如果你不明白应该如何去做,那就按 照我给出的这个小示例来一步步走。
- 在Palette里点击Toplevels下的window组件,这时在中间的空白工作区会出 现一个深色方框,这个就是你程序的主窗口。
- 在Inspector里,用鼠标选中你刚新建的那个窗口,在下面的Properties里进 行如下编辑:
- General标签下,将Name属性改为window,将Window Title改为ABitNo;
- 在 Signals标签下,你可以在GtkWidget那一类中找到个delete-event,为它的Handler选择gtk_main_quit,同样 给GtkObject那一类中唯一的destroy选择gtk_main_quit
- 在Palette里点击 Container下的Fixed,在你上一步新建的window中点击,这样就创建好了一个容器,然后按照给window修改名字的方法将其改名为 fixed。容器就是一个可以存放其他组件并进行布局的一种组件
- 在Palette里点击Control and Display下的Label,在Fixed容器上点击,这样你就把label放到了Fixed容器里了,在Properties的General标签下 将Name属性改为label,将Label属性里的内容都删除。最后你可以点击工具栏上的那个Drag Resize按钮,然后你就可以选中label进行拖拽,来摆放出一个合适的位置,位置不会影响程序的功能,但是会影响美观(ABitNo做的就很不美 观)
- 在Palette里点击Control and Display下的Button,在Fixed容器上点击,这样你就在Fixed容器里又放置了一个按钮,将其Name属性改为button,Label 属性改为ABitNo,同样的你可以通过拖拽来调节它的大小和位置
3、编写代码
这一步才是关键,界面设计是次要的,Glade就是把界面与代码分开,这样更便于维护。先不多说了,直接看代码,代 码里ABitNo都已经把注释写的很详细了,如果仍然有不明白的可以提出来。
你现在要做的就是打开一个编辑器,如gedit,在 abitno.glade所在的文件夹里编辑一个文件abitno.c,内容如下
* 这句include就是简单的包含gtk的头文件 *
***********************************************************************/
#include <gtk/gtk.h>
/***********************************************************************
* 从名字就可以看出这是一个button被点击时要执行的函数 *
***********************************************************************/
void on_button_clicked(GtkWidget *widget, gpointer label)
{
/*这是gtk的一个函数,用来给Label设定文字*/
gtk_label_set_text(GTK_LABEL(label),"I Love ABitNo.LinPie.com");
}
int main(int argc, char *argv[])
{
/*这些語句声明了一些组件变量,由于GTK是面向对象的,
所以都可以声明为GtkWidget,这也是习惯作法 */
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *button;
GtkWidget *label;
/*每一个gtk程序都会用到这一句,用来初始化*/
gtk_init(&argc, &argv);
/*这个builder就是用来读取我们用Glade设计的界面的一个东西*/
builder = gtk_builder_new();
/*用下面这个gtk函数把abitno.glade的内容给builder*/
gtk_builder_add_from_file(builder, "abitno.glade", NULL);
/*通过名字从abitno.glade中读取我们需要使用的组件*/
window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
button=GTK_WIDGET(gtk_builder_get_object(builder,"button"));
label=GTK_WIDGET(gtk_builder_get_object(builder,"label"));
/*这是glib里的一个函数,用来把一个组件与一个函数关联起来,下面
这句就是把button和我们上面的那个on_button_clicked给关联了*/
g_signal_connect( G_OBJECT(button), "clicked",
G_CALLBACK(on_button_clicked), (gpointer)label);
/*这条語句就是自动把所有人信号处理函数都关联好*/
gtk_builder_connect_signals(builder, NULL);
/*因为我们已经不需要builder了,就释放builder的空间*/
g_object_unref(G_OBJECT(builder));
/*将window内所有的组件都显示出来,这们我们才能看见*/
gtk_widget_show_all(window);
/*这也是每一个gtk程序都要有的*/
gtk_main();
return 0;
}4、编译运行
当你的代码都写完了,那就保存,准备编译了,用下面的命令
gcc -o abitno abitno.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic要注意,pkg-config前后的那个不是单引号,而是ESC下面那个键。
然后通过下面的命令来运行
./abitno如果一切顺利的话,就会出现一个窗口,上面只显示一个ABitNo按钮,你点击它就会出现一句话“I Love ABitNo.LinPie.com“,如下图