GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3786|回复: 4

2.3 标签

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-16 12:17
  • 签到天数: 401 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-30 01:44:39 | 显示全部楼层 |阅读模式
    本帖最后由 白浪 于 2013-8-30 01:54 编辑

       GtkLabel(标签)是用来显示一些包括文字跟数字等信息的控件。在前面的介绍按钮的章节中,其实是在按钮上创建了标签的。本节主要是讲解标签的创建、使用以及标签的一些不同的样式。
      同按钮,可以用gtk_label_new()来创建标签。

      如上图,在窗口中有一个标签,可以用如下代码,具体可以看注释
    1. #include <gtk/gtk.h>


    2. int main (void)
    3. {
    4.     GtkWidget *window = NULL;
    5.     GtkWidget *label = NULL;
    6.     // 初始化 GTK
    7.     gtk_init(NULL, NULL);
    8.     // 建立一個新的 GtkWindow
    9.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    10.     //建立一个新的label
    11.     //button = gtk_button_new ();
    12.     label = gtk_label_new ("label");
    13.     // 設置標題
    14.     gtk_window_set_title (GTK_WINDOW (window), "Window");
    15.     // 設置默認大小
    16.     gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    17.     //将label放置到window容器中
    18.     gtk_container_add(GTK_CONTAINER(window),label);
    19.     // 處理 "destroy" 信號,當窗口被關閉時退出程序
    20.     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    21.     // 顯示窗口和所有子組件
    22.     gtk_widget_show_all (window);
    23.     // 開始事件循環
    24.     gtk_main ();
    25.     // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    26.     return 0;
    27. }
    复制代码
    gtk_label_set_justify ()void                gtk_label_set_justify               (GtkLabel *label,
                                                             GtkJustification jtype);
         Sets the alignment of the lines in the text of the label relative to each other. GTK_JUSTIFY_LEFT is the default value when the widget is first created with gtk_label_new(). If you instead want to set the alignment of the label as a whole, use gtk_misc_set_alignment() instead. gtk_label_set_justify() has no effect on labels containing only a single line.
    label :
    a GtkLabel
    jtype :
    a GtkJustification


    由以上我们可以知道gtk_label_set_justify ()这个函数可以用来设置label文字的对齐方式,因为gtk_label_set_justify() 对单行文本无效,所以我们可以用\n来强制换行,如下图所示:
    1. #include <gtk/gtk.h>


    2. int main (void)
    3. {
    4.     GtkWidget *window = NULL;
    5.     GtkWidget *label = NULL;
    6.     // 初始化 GTK
    7.     gtk_init(NULL, NULL);
    8.     // 建立一個新的 GtkWindow
    9.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    10.     //建立一个新的label
    11.     //button = gtk_button_new ();
    12.     label = gtk_label_new ("this is a \n label to test!");
    13.     // 設置標題
    14.     gtk_window_set_title (GTK_WINDOW (window), "Window");
    15.     // 設置默認大小
    16.     gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    17.     //将label放置到window容器中
    18.     gtk_container_add(GTK_CONTAINER(window),label);
    19.     //将label右对齐
    20.     gtk_label_set_justify (GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
    21.     // 處理 "destroy" 信號,當窗口被關閉時退出程序
    22.     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    23.     // 顯示窗口和所有子組件
    24.     gtk_widget_show_all (window);
    25.     // 開始事件循環
    26.     gtk_main ();
    27.     // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    28.     return 0;
    29. }
    复制代码
    对齐方式主要有:
    GTK_JUSTIFY_LEFT
    The text is placed at the left edge of the label.
    GTK_JUSTIFY_RIGHT
    The text is placed at the right edge of the label.
    GTK_JUSTIFY_CENTER
    The text is placed in the center of the label.
    GTK_JUSTIFY_FILL
    The text is placed is distributed across the label.  


    作业,阅读以下英文,利用gtk_label_set_markup函数来格式化标签

    gtk_label_set_markup ()
    void                gtk_label_set_markup                (GtkLabel *label,                                                         const gchar *str);
    Parses str which is marked up with the Pango text markup language, setting the label's text and attribute list based on the parse results. If the str is external data, you may need to escape it with g_markup_escape_text() or g_markup_printf_escaped():


    char *markup;
    markup = g_markup_printf_escaped ("<span style=\"italic\">%s</span>", str);
    gtk_label_set_markup(GTK_LABEL (label), markup);
    g_free (markup);


    label :
    a GtkLabel
    str :
    a markup string (see Pango markup format)





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?马上加入

    x
  • TA的每日心情
    奋斗
    2015-10-16 12:17
  • 签到天数: 401 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-30 01:45:05 | 显示全部楼层
    占楼,发答案
  • TA的每日心情
    奋斗
    2015-10-16 12:17
  • 签到天数: 401 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-30 01:45:25 | 显示全部楼层
    本帖最后由 白浪 于 2013-8-30 02:34 编辑

      为了讲解点一些常用的用法,本节插讲一些关于布局和容器的知识。以后会有专门的章节讲解,本节只是简单的讲解GtkFixed(固定容器构件)。  GtkFixed允许将构件放在窗口的固定位置。这个位置是相对窗口的左上角的,构件的位置可以动态改变。一般来说,用GtkFixed为构件定位不怎么可取,因为窗口大小有变化时,构件并不能实时的适应窗口尺寸的变化。

    在这里只是简单的讲解一下,gtk_fixed_new函数用于创建新的GtkFixed.  gtk_fixed_put函数将构件放在指定位置。gtk_fixed_move函数将指定的构件移动到新的位置。

    如图所示,以下代码将togglebutton放在了相对左上角坐标为20,20的位置上
    1. #include <gtk/gtk.h>


    2. int main (void)
    3. {
    4.     GtkWidget *window = NULL;
    5.     //GtkWidget *label = NULL;
    6.     GtkWidget *fixed = NULL;
    7.     GtkWidget *button = NULL;
    8.     // 初始化 GTK
    9.     gtk_init(NULL, NULL);
    10.     // 建立一個新的 GtkWindow
    11.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    12.     //建立一个新的label
    13.     button = gtk_toggle_button_new_with_label ("press to change the label");
    14.     //label = gtk_label_new ("this is a \n label to test!");
    15.     fixed=gtk_fixed_new();
    16.     gtk_fixed_put(GTK_FIXED(fixed),button,20,20);
    17.     //gtk_fixed_put(GTK_FIXED(fixed),label,20,40);
    18.     // 設置標題
    19.     gtk_window_set_title (GTK_WINDOW (window), "Window");
    20.     // 設置默認大小
    21.     gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    22.     //将label放置到window容器中
    23.     gtk_container_add(GTK_CONTAINER(window),fixed);
    24.     // 處理 "destroy" 信號,當窗口被關閉時退出程序
    25.     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    26.     // 顯示窗口和所有子組件
    27.     gtk_widget_show_all (window);
    28.     // 開始事件循環
    29.     gtk_main ();
    30.     // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    31.     return 0;
    32. }
    复制代码
    下面我们结合上一节的togglebutton,在窗口上放置一个togglebutton 跟一个label,当togglebutton被按下时,将标签改成button  pressed,弹起时,将标签改成button raised .
    1. #include <gtk/gtk.h>
    2. GtkWidget *label = NULL;

    3. void button_toggled(GtkWidget *widget,gpointer *data)
    4. {
    5.     //在终端中打印
    6.     if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))==TRUE)
    7.     gtk_label_set_text(GTK_LABEL(label),"button  pressed!");
    8.     else
    9.     gtk_label_set_text(GTK_LABEL(label)," button raised!");
    10. }
    11. int main (void)
    12. {
    13.     GtkWidget *window = NULL;
    14.     //GtkWidget *label = NULL;
    15.     GtkWidget *fixed = NULL;
    16.     GtkWidget *button = NULL;
    17.     // 初始化 GTK
    18.     gtk_init(NULL, NULL);
    19.     // 建立一個新的 GtkWindow
    20.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    21.     //建立一个新的label
    22.     button = gtk_toggle_button_new_with_label ("press to change the label");
    23.     label = gtk_label_new ("label");
    24.     fixed=gtk_fixed_new();
    25.     gtk_fixed_put(GTK_FIXED(fixed),button,20,20);
    26.     gtk_fixed_put(GTK_FIXED(fixed),label,20,80);
    27.     // 設置標題
    28.     gtk_window_set_title (GTK_WINDOW (window), "Window");
    29.     // 設置默認大小
    30.     gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    31.     //将label放置到window容器中
    32.     gtk_container_add(GTK_CONTAINER(window),fixed);
    33.     // 處理 "destroy" 信號,當窗口被關閉時退出程序
    34.     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    35.     g_signal_connect (button, "toggled", G_CALLBACK (button_toggled), NULL);
    36.     // 顯示窗口和所有子組件
    37.     gtk_widget_show_all (window);
    38.     // 開始事件循環
    39.     gtk_main ();
    40.     // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    41.     return 0;
    42. }
    复制代码
    作业:如下图所示,当按下+键时,右边的label加1,按下-键时,label减1


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?马上加入

    x
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-11-1 10:25 , Processed in 0.027702 second(s), 9 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表