白浪 发表于 2013-8-30 01:44:39

2.3 标签

本帖最后由 白浪 于 2013-8-30 01:54 编辑

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

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


int main (void)
{
    GtkWidget *window = NULL;
    GtkWidget *label = NULL;
    // 初始化 GTK
    gtk_init(NULL, NULL);
    // 建立一個新的 GtkWindow
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    //建立一个新的label
    //button = gtk_button_new ();
    label = gtk_label_new ("label");
    // 設置標題
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    // 設置默認大小
    gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    //将label放置到window容器中
    gtk_container_add(GTK_CONTAINER(window),label);
    // 處理 "destroy" 信號,當窗口被關閉時退出程序
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    // 顯示窗口和所有子組件
    gtk_widget_show_all (window);
    // 開始事件循環
    gtk_main ();
    // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    return 0;
}
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来强制换行,如下图所示:
#include <gtk/gtk.h>


int main (void)
{
    GtkWidget *window = NULL;
    GtkWidget *label = NULL;
    // 初始化 GTK
    gtk_init(NULL, NULL);
    // 建立一個新的 GtkWindow
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    //建立一个新的label
    //button = gtk_button_new ();
    label = gtk_label_new ("this is a \n label to test!");
    // 設置標題
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    // 設置默認大小
    gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    //将label放置到window容器中
    gtk_container_add(GTK_CONTAINER(window),label);
    //将label右对齐
    gtk_label_set_justify (GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
    // 處理 "destroy" 信號,當窗口被關閉時退出程序
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    // 顯示窗口和所有子組件
    gtk_widget_show_all (window);
    // 開始事件循環
    gtk_main ();
    // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    return 0;
}
对齐方式主要有:

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)





白浪 发表于 2013-8-30 01:45:05

占楼,发答案

白浪 发表于 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的位置上#include <gtk/gtk.h>


int main (void)
{
    GtkWidget *window = NULL;
    //GtkWidget *label = NULL;
    GtkWidget *fixed = NULL;
    GtkWidget *button = NULL;
    // 初始化 GTK
    gtk_init(NULL, NULL);
    // 建立一個新的 GtkWindow
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    //建立一个新的label
    button = gtk_toggle_button_new_with_label ("press to change the label");
    //label = gtk_label_new ("this is a \n label to test!");
    fixed=gtk_fixed_new();
    gtk_fixed_put(GTK_FIXED(fixed),button,20,20);
    //gtk_fixed_put(GTK_FIXED(fixed),label,20,40);
    // 設置標題
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    // 設置默認大小
    gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    //将label放置到window容器中
    gtk_container_add(GTK_CONTAINER(window),fixed);
    // 處理 "destroy" 信號,當窗口被關閉時退出程序
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    // 顯示窗口和所有子組件
    gtk_widget_show_all (window);
    // 開始事件循環
    gtk_main ();
    // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    return 0;
}下面我们结合上一节的togglebutton,在窗口上放置一个togglebutton 跟一个label,当togglebutton被按下时,将标签改成buttonpressed,弹起时,将标签改成button raised .#include <gtk/gtk.h>
GtkWidget *label = NULL;

void button_toggled(GtkWidget *widget,gpointer *data)
{
    //在终端中打印
    if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))==TRUE)
    gtk_label_set_text(GTK_LABEL(label),"buttonpressed!");
    else
    gtk_label_set_text(GTK_LABEL(label)," button raised!");
}
int main (void)
{
    GtkWidget *window = NULL;
    //GtkWidget *label = NULL;
    GtkWidget *fixed = NULL;
    GtkWidget *button = NULL;
    // 初始化 GTK
    gtk_init(NULL, NULL);
    // 建立一個新的 GtkWindow
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    //建立一个新的label
    button = gtk_toggle_button_new_with_label ("press to change the label");
    label = gtk_label_new ("label");
    fixed=gtk_fixed_new();
    gtk_fixed_put(GTK_FIXED(fixed),button,20,20);
    gtk_fixed_put(GTK_FIXED(fixed),label,20,80);
    // 設置標題
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    // 設置默認大小
    gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
    //将label放置到window容器中
    gtk_container_add(GTK_CONTAINER(window),fixed);
    // 處理 "destroy" 信號,當窗口被關閉時退出程序
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect (button, "toggled", G_CALLBACK (button_toggled), NULL);
    // 顯示窗口和所有子組件
    gtk_widget_show_all (window);
    // 開始事件循環
    gtk_main ();
    // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
    return 0;
}
作业:如下图所示,当按下+键时,右边的label加1,按下-键时,label减1


白浪 发表于 2013-8-30 01:45:33

占楼

白浪 发表于 2013-8-30 01:45:40

占楼
页: [1]
查看完整版本: 2.3 标签