Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Interface Graphique > Créez une interface avec GTK+ ! > Les bases de GTK > Le texte avec les labels > Lecture du tutoriel

Le texte avec les labels

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteurs : JRG Soft et Picxime
Note : 18 / 20 (11 votes)
Visualisations : 17 292

Plus d'informations Plus d'informations
Dans le chapitre précédent, nous avons vu comment faire une fenêtre. Le problème est qu'une fenêtre vide sert à rien. C'est pourquoi, dans ce chapitre, nous allons découvrir comment afficher du texte dans nos fenêtres. Pour cela nous allons utiliser des labels. Pour ceux qui ne parlent pas anglais, label veut dire étiquette. Nous allons donc "accrocher" des étiquettes sur nos widgets :p .
lais signifiant étiquette.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Les GtkLabels

Créer un label



Tout d'abord, nous allons déclarer un nouvel objet GtkLabel de type GtkWidget. Vous pouvez l'appeler comme vous le voudrez.
Je rappelle qu'il est indispensable de déclarer un widget avant de l'utiliser.


Code : C
1
GtkWidget* label = NULL;


Maintenant que notre widget est déclaré, nous allons l'initialiser avec la fonction suivante:

Code : C
1
GtkWidget* gtk_label_new (const gchar *str);


Le paramètre :

Voilà, notre GtkLabel est créé. Nous allons maintenant le rajouter dans la fenêtre avec la fonction suivante :


Code : C
1
void gtk_container_add (GtkContainer *container, GtkWidget *widget);


Les paramètres :

Attention, container est de type GtkContainer. Pour que notre fonction marche nous allons utiliser une macro comme pour les fenêtres: GTK_CONTAINER().

N'oubliez pas d'afficher la fenêtre et le label, pour ce faire utilisez la fonction gtk_widget_show_all ! ;)

Les deux dernières fonctions sont très très importantes, elles vous serviront dans tous vos programmes. La première sert à ajouter un widget dans la fenêtre (ou dans un autre container) et la deuxième sert à afficher cette fenêtre. Dans la suite de ce tutorial, je ne vais pas répéter qu'il faut utiliser ces fonctions à chaque fois. C'est logique, sans ces fonctions, rien ne s'affiche.


Récupérer et modifier un label



Récupérer un label



Dans certains programmes, il est parfois nécessaire de récupérer le contenu d'un label. Là aussi, une fonction très simple :

Code : C
1
const gchar* gtk_label_get_label (GtkLabel *label);


Le paramètre :

Attention, label est de type GtkLabel. Comme pour container, nous allons utiliser la macro GTK_LABEL().
De plus, faites bien attetion, la fonction renvoie un pointeur const.
Cette fonction retourne le texte de notre label (avec son formatage, voir plus bas) dans une variable. Faites attention si vous lisez la doc de GTK, il existe une fonction semblable, mais qui ne prend pas en compte le formatage.



Modifier un label



Sur le principe de la dernière fonction, gtk_label_set_label () permet de modifier un label.

Code : C
1
void gtk_label_set_label (GtkLabel *label, const gchar *str);


Les paramètres :

Les Accents

Il y a un bug avec GTK ! Quand j'écris Je suis un zéro, il coupe le texte au niveau de l'accent, ou m'affiche des caractères bizarres !!!
Bonne remarque ! Les textes accentués ne s'affichent pas bien, et ce n'est pas un bug.

Pango, l'indispensable

Pour afficher un texte, GTK utilise Pango (Pan du grec qui veut dire "tous" et go du japonais qui veut dire "langage": tous les langages). C'est une bibliothèque qui est chargée du rendu des caractères et de l'affichage de texte internationalisé. Pour les spécialistes, cette bibliothèque utilise l'Unicode (pour l'encodage des caractères).
Pourquoi alors votre texte ne s'affiche pas comme vous le souhaitez? La raison est que votre système d'exploitation n'utilise pas forcement le même jeu de caractère que notre bibliothèque. Nous allons trés rapidement contourner ce problème en utilisant la fonction ci-dessous qui va convertir notre texte : Code : C
gchar* g_locale_to_utf8 (const gchar *opsysstring, gssize len, gsize *bytes_read, gsize *bytes_written, GError **error);
Les paramètres :
Cette fonction converti la chaine, mais ne la modifie pas : elle alloue de la mémoire pour stocker la conversion et retourne un pointeur vers celle-ci. N'oubliez donc pas de libérer cette chaine avec g_free.

Voir aussi

Si cela vous embête d'avoir à convertir toutes vos chaines accentuées, il existe une solution toute simple. Voir les astuces dans les annexes

Changer le style d'un label

C'est génial d'afficher du texte, mais j'aimerais le centrer et le mettre en gras. Tu n'a pas une fonction qui pourrait faire ça?

GTK, n'est pas un traitement de texte... :lol: , mais ses créateurs nous ont prévu ce genre de fonction.



L'alignement



Le texte est pour le moment aligné à gauche, mais moi je préfèrerais qu'il soit centré, pas vous?
Pour modifier l'alignement de notre label, la fonction gtk_label_set_justify () est tout à fait appropriée, tout simplement par ce qu'elle ne sait faire que ça. :p

Code : C
1
void gtk_label_set_justify (GtkLabel *label, GtkJustification jtype);


Les paramètres :



Le formatage du texte avec les balises



Pour mettre un texte en forme, Pango utilise des balises (comme pour le Zcode).

Avec les balises "simples" ou "courtes"



Les balises ci-dessous vous permettent de personnaliser un texte simplement.



Avec Span



La balise <span class="bleugris">span</span> est différente des dernières. Elle a des attributs qui lui permettent de modifier la police, la taille, la couleur des caractères.
Elle s'utilise comme ceci :
<span attribut1="valeur" attribut2="valeur">...</span>

Maintenant, il y a une chose primordiale à ne pas oublier: il faut dire que l'on utilise les balises de pango.
Pour cela nous avons deux choix, soit on intègre ces balises directement dans notre fonction de convertion, soit nous utiliserons une fonction spécifique.



On intègre nos balises à notre fonction de convertion



Cette fonction très pratique permet de convertir à la fois le texte et les balises. Il vous suffit d'écrire vos balises avec votre texte dans g_locale_to_utf8 puis de rajouter la fonction ci-dessous après la convertion :

Code : C
1
void gtk_label_set_use_markup (GtkLabel *label, gboolean setting);


Les paramètres :



On utilise pas notre fonction de conversion



Si vous n'avez pas de caractères spéciaux à convertir, l'utilisation de cette fonction sera plus adaptée.

Code : C
1
void gtk_label_set_markup (GtkLabel *label, const gchar *str);


Les paramètres :

C'est fini, il ne reste plus qu'à afficher le label.

Exemple

Je vous propose un petit exemple qui reprend les fonctions vues dans ce chapitre ! :)

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc,char **argv)
{
    GtkWidget* Fenetre = NULL;
    GtkWidget* Label = NULL;
    gchar* TexteConverti = NULL;

    gtk_init(&argc, &argv);

    Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
    gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre
    gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre
    
    TexteConverti = g_locale_to_utf8("<span face="Verdana" foreground="#73b5ff" size="xx-large"><b>Le site du Zéro</b></span>\n <span face="Verdana" foreground="#39b500" size="x-large">Le tuto GTK</span>\n", -1, NULL, NULL, NULL);  //Convertion du texte avec les balises
    Label=gtk_label_new(TexteConverti); // Application de la convertion à notre label
    g_free(TexteConverti); // Libération de la mémoire

    gtk_label_set_use_markup(GTK_LABEL(Label), TRUE); // On dit que l'on utilise les balises pango

    gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); // On centre notre texte

    gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'

    gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient

    g_signal_connect(G_OBJECT(Fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL); // Je ne commente pas cette fonction, vous la verrez dans le chapitre suivant.

    gtk_main();

    return EXIT_SUCCESS;
}


Et voici le résultat :
Gtk Label


Maintenant c'est a vous de bosser... ^^

Q.C.M.

Pourquoi, quand j'écris "GTK est un Big Tuto sur le site du Zéro", il ne m'affiche pas mon texte entièrement ?
Que défini l'attribut foreground ?
A quoi sert la fonction gtk_label_set_use_markup() ?

Statistiques de réponses au QCM


Ce chapitre est fondamental (comme tout les chapitre de cette partie :p ), vous allez vous servir des labels partout où vous voudrez afficher du texte.

Dans le chapitre suivant, vous allez découvrir le fonctionnement des évènements. Là aussi, ce chapitre est primordial.
Je le qualifierais même comme le chapitre le plus important. Sans lui, vous ne saurez rien faire avec GTK. Si si, c'est vrai !

Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 02/10/2006 à 20:40:11
Modifié : le 22/08/2008 à 15:50:40
Avancement : 100%
Licence : Creative Commons BY-SA

22 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 88 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0688s (0.0558s)