一、简介
Glade是一种开发GTK+应用程序的RAD(Rapid Application Development)工具。Glade自身就是一个GTK+应用程序,因为它就是用GTK+ 开发出来的,Glade用来简化UI 控件的设计和布局操作,进行快速开发。Glade的设计初衷是把界面设计与应用程序代码相分离,界面的修改不会影响到应用程序代码,Glade设计的界面保存为glade格式文件,它实际上是一种XML文件。
Glade3与Glade2的区别是:Glade2生成C语言代码,而Glade3只生成xml文件,后缀是.glade(实现了与代码分离,支持其他语言调用,如python)。
可以利用Libglade库在运行时动态创建界面,也可以使用GtkBuilder来加载glade文件(GtkBuilder来代替Libglade会减少libglade-2.0的依赖)。在glade新建项目时会提示选择不同的文件格式:
二、详解
1、Libglade库
代码libglade.c:
#include <gtk/gtk.h>
#include <glade/glade.h>
int main(int argc, char **argv)
{
GladeXML *gxml;
GtkWidget *window;
//GtkWidget *button;
gtk_init(&argc, &argv);
gxml = glade_xml_new("libglade.glade", NULL, NULL); //读取xml文件
window = glade_xml_get_widget(gxml, "window1"); //获取名为window1控件的指针
//button = glade_xml_get_widget(gxml, "button1"); //手动连接信号
glade_xml_signal_autoconnect (gxml); //自动连接信号
g_object_unref(G_OBJECT(gxml));
//gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_main_quit), NULL );
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_title(GTK_WINDOW(window), "Libglade");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
gtk_widget_realize(window);
gtk_widget_show_all(window);
gtk_main();
return TRUE;
}
编译运行:
gcc -o libglade libglade.c `pkg-config --libs --cflags gtk+-2.0 libglade-2.0`
2、GtkBuilder
代码gtkbuilder.c:
#include <gtk/gtk.h>
void on_window_destroy(GtkObject *object, gpointer user_data)
{
gtk_main_quit();
}
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "gtkbuilder.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_title(GTK_WINDOW(window), "Gtkbuilder");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_window_destroy), NULL);
gtk_builder_connect_signals(builder, NULL);
g_object_unref(G_OBJECT (builder));
gtk_widget_show(window);
gtk_main ();
return 0;
}
编译运行:
gcc -o gtkbuilder gtkbuilder.c `pkg-config --cflags --libs gtk+-2.0`
3、附加
libglade格式的文件,python可以直接调用,所以Python可以使用gtk+快速开发有图形用户界面的程序:import gtk
import gtk.glade
def some_handler(widget):
gtk.main_quit()
xml = gtk.glade.XML('libglade.glade')
widget = xml.get_widget('window1')
widget.connect("delete_event", gtk.main_quit)
xml.signal_autoconnect({
'gtk_main_quit': some_handler #find handler from xml
})
widget.show_all()
gtk.main()
运行结果与上述界面一样。
三、总结
(1)pkg-config --modversion gtk+-2.0查看gtk+的版本,pkg-config --cflags --libs gtk+-2.0查看gtk+的头文件和开发库。(2).glade文件是xml文件,其格式转换可以在glade界面下选择:编辑—首选项进行新的设置。
(3)若有建议,请留言,在此先感谢!