GTK+浅谈之十四Glade使用

一、简介

        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)若有建议,请留言,在此先感谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦2号

博文不易,支持的请给予小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值