在前面的文章介绍了使用Glade进行PyGTK开发,现在再来说一说使用Glade来进行GTK的开发。
首先需要的开发环境:
Glade3、GTK+2.0、GCC
先用Glade设计一个用户界面,保存为test.glade,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="2.24"/> <object class="GtkWindow" id="window1"> <property name="can_focus">False</property> <property name="resizable">False</property> <property name="default_width">440</property> <property name="default_height">450</property> <signal name="destroy" handler="on_MainWindow_destroy" swapped="no"/> <child> <object class="GtkAlignment" id="alignment1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="top_padding">10</property> <property name="bottom_padding">10</property> <property name="left_padding">10</property> <property name="right_padding">10</property> <child> <object class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">龙昌博客: http://www.xefan.com</property> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="button1"> <property name="label" translatable="yes">关闭</property> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="on_MainWindow_destroy" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> </interface>
|
再创建一个C源文件,保存为test.c,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <gtk/gtk.h>
void on_MainWindow_destroy(GtkObject *widget, gpointer data) { gtk_main_quit(); }
int main(int argc, char *argv[]) { GtkBuilder *builder; gtk_init(&argc, &argv); GtkWidget *window; builder = gtk_builder_new(); gtk_builder_add_from_file(builder, "test.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); gtk_builder_connect_signals(builder, NULL); g_object_unref(G_OBJECT(builder));
gtk_widget_show_all(window); gtk_main(); return 0; }
|
然后再编译运行查看效果。
如果出现类似“Gtk-WARNING **: Could not find signal handler ‘on_MainWindow_destroy’”的错误请尝试以下方法:
方法一:将编译命令改为:gcc -o test test.c `pkg-config –libs –cflags gtk+-2.0` -export-dynamic
方法二:将编译命令改为:gcc -o test test.c `pkg-config –libs –cflags libglade-2.0 gmodule-export-2.0`