GtkFr - Cours Gtk+-2

PyLesLabels

PageAccueil :: LesNews :: Telechargement :: Liens :: Forum :: LeChat :: Contact
DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.191.92
<< Les fenêtres PyGtk Les boutons (Partie 1) >>


Les Labels

1. Présentation

Le widget GtkLabel va nous permettre d'afficher du texte à l'intérieur de nos fenêtres.

1.1 Hiérarchie

GObject -> GtkObject -> GtkWidget -> GtkMisc? -> GtkLabel

2. Utilisation de base

2.1 Création d'un label

label = gtk.Label(str)
Le paramètre str n'est autre que le texte qui sera affiché par le GtkLabel.

2.2 Modification du label

Il peut arriver qu'au cours d'un programme, l'on veuille modifier le texte qui est affiché. La fonction à utiliser est la suivante :
label.set_label(str);
Le paramètre str est le nouveau texte qui sera affiché.

2.3 Récupération du label

Pour récupérer le texte qui est affiché par un label, la fonction est :
texte = label.get_label()

2.4 Alignement du texte

Maintenant, nous allons voir comment aligner notre texte, lorsque celui-ci comporte plusieurs lignes. Comme d'habitude, GTK+ nous fourni une méthode très simple d'utilisation :
label.set_justify(jtype)
Le paramètre jtype correspond à l'alignement du texte et peut prendre une de ces valeurs :

Au contraire, pour obtenir l'alignement du texte, la fonction est :
justification = label.get_justify()

2.5 Programme exemple

Nous allons, comme programme exemple, utiliser le classique "Hello Word".
import gtk

def main():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("Les labels")
    window.set_default_size(320, 200)

    # Creation du label
    label = gtk.Label("Hello World!")

    # On ajoute le label a l'interieur de la fenetre
    window.add(label)

    # Affichage de la fenetre et de tout ce qu'il contient
    window.show_all()

    # Connexion du signal
    # On appelle directement la fonction de sortie de boucle
    window.connect("destroy", gtk.main_quit, None)

    gtk.main()

if __name__ == '__main__':
    main()
Résultats

3. Les caractères accentués

Vous avez peut-être déjà essayé d'afficher du texte contenant des caractères tel que "é, è, à, …", et lors de l'exécution, votre texte ne s'affiche pas complètement. Nous allons maintenant voir le pourquoi du comment.

3.1 Application test

Pour vous montrer tout cela, nous allons reprendre l'exemple précédent en remplaçant " Hello Word " par " Texte à afficher ", et cela ne marche pas! En effet vous obtenez cela :


Et en plus sur la console, vous avez le message d'erreur suivant :
** (Label2.py) : WARNING **: Invalid UTF8 string passed to pango_layout_set_text()

3.2 Comment ça marche ?

Pour afficher du texte, Gtk utilise la librairie Pango qui s'occupe du rendu et de l'affichage du texte. Le but de Pango est de permettre l'internationalisation des applications, et pour cela Pango utilise l'encodage UTF8. Ce charset est codée sur 16 bits, ce qui offre la possibilité d'afficher plus de 65000 caractères, permettant ainsi d'afficher des caractères accentués et bien plus (ex : pour le grec, le chinois, ...).
Puisque Pango sait faire tout cela, pourquoi le test n'a-t-il pas fonctionné? Et bien, tout simplement parce que votre système d'exploitation n'utilise pas ce charset. Lorsque vous souhaitez afficher "Texte à afficher", Pango va avant tout vérifier l'encodage d'un caractère et si l'un de ces caractères n'est pas correct, Pango va arrêter son processus de rendu et envoyer un message d'erreur.
Le moyen le plus simple pour voir les effets d'une erreur d'encodage est de changer celui de votre navigateur. Modifiez les options de votre navigateur afin d'utiliser l'encodage UNICODE. Cette page web utilisant le charset iso-8859-1, les caractères accentués deviendront des carrés ou autre chose.

3.3 Solution

La solution la plus simple est de définir l'encodage utilisé par le programme python, en mettant en première ligne :
# -*- Encoding: Latin-1 -*-
Adapter cette ligne avec l'encodage que vous utilisez sur votre système et votre éditeur de texte (utf-8 par exemple).
Ensuite, il faut utiliser des chaines de caractères unicode au lieu de chaines de texte simple.
En python, cela se traduit par remplacer la chaine "texte accentué" par u"texte accentué".

3.4 Programme exemple

# -*- Encoding: Latin-1 -*-
import gtk

def main():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("Les labels II")
    window.set_default_size(320, 200)

    # Creation du label avec un caractère accentué
    label = gtk.Label( u"Texte à afficher" )

    # On ajoute le label a l'interieur de la fenetre
    window.add(label)

    # Affichage de la fenetre et de tout ce qu'il contient
    window.show_all()

    # Connexion du signal
    # On appelle directement la fonction de sortie de boucle
    window.connect("destroy", gtk.main_quit, None)

    gtk.main()

if __name__ == '__main__':
    main()
Résultats

4. Formatage du texte

Nous allons maintenant voir comment modifier l'apparence de notre texte (police, couleur, …).
Pour notre application test, nous allons afficher une ligne en Courier gras taille 10, une ligne en Times New Roman italique bleu taille 12, et une ligne en Verdana souligné taille 16. Et tout cela centré (bien sûr).

4.1 Définition du format

Une fois encore, nous allons utiliser les propriétés de Pango (même si nous n'allons pas utiliser les fonctions de Pango directement).
Pour définir le format du texte, il suffit d'insérer des balises à l'intérieur même de notre texte. Pango s'occupe ensuite de rechercher les balises puis de formater le texte à notre convenance.

4.2 Les balises rapides

Les balises rapides servent à mettre le texte en gras, italique ou autre de manière très simple. Voici l'intégralité de ces balises :

Pour utiliser ces balises, il suffit d'encadrer le texte à modifier des balises de formatage. Par exemple, pour mettre le texte en gras, il faudra entrer : "Normal vs <b>Gras</b>".
Mais cela ne suffit pas, il faut aussi dire que le texte utilise les balises Pango, ce qui est possible avec la méthode suivante :
label.set_use_markup(setting)
Il faut mettre le paramètre setting à True, et le texte sera alors formaté en conséquence.
Un autre moyen de spécifier l'utilisation des balises, est d'utiliser cette méthode :
label.set_markup(str)
Cette fonction dit à Pango qu'il faut utiliser les balises, mais elle modifie aussi le label en affichant la chaîne de caractères str.

4.3 La balise <span>

Cette fois-ci, nous allons étudier la balise <span> en détail. Avec celle-ci, nous allons pouvoir changer la police de caractères, la couleur du texte et bien d'autres choses.
Cette balise s'utilise comme les précédentes si ce n'est qu'elle accepte des paramètres. Le tableau ci-dessous présente tous les paramètres et les effets sur le texte.

Tous ces paramètres peuvent être mis à l'intérieur d'une seule et même balise <span>.

4.4 Programme exemple

# -*- Encoding: Latin-1 -*-
import gtk

def main():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("Les labels III")
    window.set_default_size(320,200)

    # Creation du label
    label = gtk.Label()

    # On utilise les balises
    # FIXME: j'ai un problème avec la syntaxe du wiki qui m'empêche de mettre trois doubles quotes.
    label.set_markup("<span face=\"Courier New\"><b>Courier New 10 Gras</b></span>"
"<span font_desc=\"Times New Roman italic 12\" foreground=\"#0000FF\">Times New Roman 12 Italique</span>\n")

    # On centre le texte
    label.set_justify(gtk.JUSTIFY_CENTER)

     # On ajoute le label a l'interieur de la fenetre
     window.add(label)

     # Affichage de la fenetre et de tout ce qu'il contient
    window.show_all()

    # Connexion du signal
    # On appelle directement la fonction de sortie de boucle
    window.connect("destroy", gtk.main_quit, 0)

     gtk.main()

if __name__ == '__main__':
    main()
Résultats


<< Les fenêtres PyGtk Les boutons (Partie 1) >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]
Apinc