zoukankan      html  css  js  c++  java
  • Gtk+/Glade 编程(四)布局管理

    http://jianjiaosun.blog.163.com/blog/static/136124486201121694316493/


    By unanao
         
        本文是根据只使用Gtk+的文章http://zetcode.com/tutorials/gtktutorial/gtklayoutmanagement/,将文中的例子使用Glade实现的。
        当我们设计我们的GUI应用程序时,我们确定使用哪些组件,以及如何组织这些组件。我们使用不可见得“布局容器”对组件进行组织,这一章,我们会使用Glade实现GtkAlignment, GtkFixed, GtkVBox和GtkTable。

    一、GtkFixed
        GtkFixed容器将子组件放在固定的位置,并且大小固定。这个容器没有自动的布局管理,在大多数的应用程序中,我们不实用GtkFixed 容器。但是有一些特殊的地方,我们使用这个容器。例如游戏,与图表协作的特殊应用程序,可移动并且可以改变大小的组件(如一个在电子表格中的图表),用于 教学的小程序。
        由于叫布局容器,所以GtkFixed在容器中,中文叫“固定的”。
    在Glade中选择组件
    1.1 在"顶层"中,选择“窗口”
    1.2 在"容器"中,选择“固定的”
    1.3 在“控制和显示”中,选择“按钮”
    1.4 可以通过工具栏中“拖拽并调整工作区部件的大小”调整组件的位置和组件的大小

    编写Gtk+程序
    unanao@debian:~/Experiment/gui/layout-mgt$ cat gtkfixed.c
    /**
     * @file gtkfixed.c
     * @brief simple use of GtkFixed container 
     * @author unanao
     * @version 0.1
     * @date 2011-03-17
     */
    #include

    int main(int argc, char *argv[])
    {
    GtkWidget *window;
    GtkBuilder *builder;

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "gtkfixed.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));

    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_widget_show_all(window);

    gtk_main();

    return 0;
    }
    编译执行:
    unanao@debian:~/Experiment/gui/layout-mgt$ gcc -o gtkfixed gtkfixed.c -Wall `pkg-config --cflags --libs gtk+-2.0`
    unanao@debian:~/Experiment/gui/layout-mgt$ ./gtkfixed
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
     

    二、GtkVBox
    GtkVBox是一个盒子容器,可以将1个组件放到其中的1行里面(1个格子里)。
    使用Glade设计gui
    1、添加1个窗口
    2、在“容器”中选择“垂直框”,设置条目数为6
    3、向每一个长方条的框中添加按钮,别且修改,按钮的属性

    编写gtk+程序:
    /**
     * @file gtkvbox.c
     * @brief Simple example about using GtkVbox with Glade
     * @author unanao
     * @version 0.1
     * @date 2011-03-19
     */
    #include

    int main(int argc, char *argv[])
    {
    GtkWidget *window;
    GtkBuilder *builder;

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "gtkvbox.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));

    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
    }
    编译:gcc -o gtkvbox gtkvbox.c -Wall `pkg-config --cflags --libs gtk+-2.0`
    执行:./gtkvbox
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
    三、GtkTable
    GtkTable的是用方法与GtkVBox的方法基本一样,只是一些表各种添加组件。
    设计1个计算器的gui
    使用Glade设计GUI
    1、添加窗口
    2、在“容器”中选择“表格” -- 4*4
    3、添加按钮,并且设置按钮的属性(标签)

    编写GTK+程序:
    unanao@debian:~/Experiment/gui/layout-mgt$ cat gtktable.c
    /**
     * @file gtktale.c
     * @brief simple example about how to use gtktable with glade
     * @Compile gcc -o gtktable gtktable.c -Wall `pkg-config --cflags --libs gtk+-2.0`
     *
     * @author unanao
     * @version 0.1
     * @date 2011-03-19
     */
    #include

    int main(int argc, char *argv[])
    {
        GtkWidget *window;
        GtkBuilder *builder;

        gtk_init(&argc, &argv);

        builder = gtk_builder_new();
        gtk_builder_add_from_file(builder, "gtktable.glade", NULL);

        window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
       
        gtk_widget_show_all(window);
       
        gtk_main();

        return 0;
    }
    执行结果:
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
     四、GtkAlignment
    控制子组件的对其方式和大小
    1、添加一个窗口:
    2、添加一个垂直框“,条目数为1
    3、在垂直框上加入一个”对齐“(在容器中)
    4、这只对齐的属性:
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
    水平排列:1左右边,0 最左边
    垂直排列:1最下边,0最上边
    缩放比例:是否随着窗口的变化而变化,0为不变化。

    5、添加“水平框”(在容器中),并且设置属性

     
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
    间距设置两个框之间的间距。
    6、向“水平框”中添加两个按钮--标签为ok 和 close

    Gtk+程序:
    /**
     * @file gtkalignment.c
     * @brief simple use of GtkAlignment container
     * @author unanao
     * @version 0.1
     * @date 2011-03-17
     */
    #include

    int main(int argc, char *argv[])
    {
        GtkWidget *window;
        GtkBuilder *builder;
       

        gtk_init(&argc, &argv);

        builder = gtk_builder_new();
        gtk_builder_add_from_file(builder, "gtkalignment.glade", NULL);

        window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));

        g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);   
        gtk_widget_show_all(window);

        gtk_main();

        return 0;
    }
    执行结果:
    Gtk+/Glade  编程(四)布局管理 - unanao - unanao
     
     

    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(1053) | 评论(0) | 转发(6) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    lines-HDU5124(区间处理 +离散化)
    Reorder the Books-HDU5500
    Bad Hair Day-POJ3250(简单的入栈出栈)
    Count the Colors-ZOJ1610(线段树区间求)
    Just a Hook-HDU1698(线段树求区间)
    Mayor's posters-POJ2528(线段树+离散化)
    A Simple Problem with Integers-POJ3468
    Strongly connected-HDU4635
    Caocao's Bridges-HDU4738(Tarjin+求桥)
    Warm up-HUD4612(树的直径+Tarjin缩点)
  • 原文地址:https://www.cnblogs.com/ztguang/p/12647330.html
Copyright © 2011-2022 走看看