• 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()

     

  • 相关阅读:
    使用twisted.web实现代理服务器
    django signal 浅析
    python 中接口的实现
    浅析django的abstract,proxy, managed
    python-twisted系列(1)
    postgresql 函数demo
    django 1.5+ 权限设计浅析
    django 1.7 新特性 --- data migration
    BZOJ 3670 [Noi2014]动物园 (KMP)
    BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2545059.html
Copyright © 2020-2023  润新知