glade 与 gtk【转载】

glade 与 gtk

 

 

glade2 与 glade 3

Libglade

GTK+ and Glade3 GUI Programming Tutorial 

GTK界面开发工具 GtkBuilder

Glade 3与GTK+-2入门

 

知识点

        glade3glade2差别
glade2
生成代码,而glade3只生成xml文件(实现了与代码分离,支持其他语言调用,如python)

        如何运行glade3生成的xml界面
借助libglade库读取xml文件,并生成控件

 

示例

test.glade

 

复制代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.0 on Tue Nov 20 14:05:37 2007 -->
<glade-interface>
  <widget class="GtkWindow" id="window1">
    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    <child>
      <placeholder/>
    </child>
  </widget>
</glade-interface>
复制代码

 

 

test.glade的同级目录下,编写源码main.c

 

复制代码
#include <gtk/gtk.h>

#include <glade/glade.h> 

int main(int argc, char **argv)
{
        GladeXML *gxml;

        GtkWidget *window;

        gtk_init(&argc, &argv);

        gxml = glade_xml_new("test.glade", NULL, NULL);   // 读取xml文件

        window = glade_xml_get_widget(gxml, "window1");   // 获取名为window1控件的指针

        g_object_unref(G_OBJECT(gxml));

        gtk_widget_realize(window);

        gtk_widget_show(window);

        gtk_main();
        return 0;

}
复制代码

         编译

gcc main.c -o main `pkg-config --libs --cflags gtk+-2.0 libglade-2.0`

         执行结果
./main
显示gtk建立的窗口

 

自 gtk 的版本升到 2.12,它就包含了 GtkBuilder .(pkg-config --modversion gtk+-2.0 查看版本)
GtkBuilder 的作用和 libglade 一样,用来加载 glade 文件,
所以,如果使用 GtkBuilder 来代替 libglade ,这样就可以在使用过程中,减少一个依赖

main.c

复制代码
/*
First run tutorial.glade through gtk-builder-convert with this command:
  gtk-builder-convert tutorial.glade tutorial.xml
  
Then save this file as main.c and compile it using this command
(those are backticks, not single quotes):
  gcc -Wall -g -o main main.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic
  
Then execute it using:
  ./tutorial
*/
#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, "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 (window);                
    gtk_main ();

    return 0;
}
复制代码

 

使用python调用xml

test.py

 

复制代码
import gtk
import gtk.glade

def some_handler(widget):
    pass

xml = gtk.glade.XML('test.glade')
widget = xml.get_widget('window1')
xml.autoconnect({
  'some_handler': some_handler
})
gtk.main()
复制代码

 

 

posted @ 2012-07-01 10:10  Leo Forest  阅读(366)  评论(0编辑  收藏  举报