Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

Chapitre 9. Widgets divers

Sommaire

9.1. Les étiquettes
9.2. Les flèches
9.3. Les infobulles
9.4. La barre de progression
9.5. Les boites de dialogue
9.6. Les images
9.6.1. Les Pixmaps
9.7. Les règles
9.8. La barre d'état
9.9. Les champs de saisie
9.10. Les boites d'incrément
9.11. Les listes déroulantes
9.12. Le calendrier
9.13. Le sélecteur de couleur
9.14. Le sélecteur de fichier
9.15. Le sélecteur de police

9.1. Les étiquettes

Les étiquettes (gtk.Label) sont des widgets relativement simples et très utilisés dans GTK. Elles ne peuvent émettre aucun signal car elles n'ont pas de fenêtres X associées. Pour capter quand même des signaux ou pour ce qui concerne le découpage, il vous faudra les placer dans des boites à évènements ou dans des boutons (voir Boutons simples).

Pour créer une étiquette, on utilise la méthode suivante :

  etiquette = gtk.Label(str)

L'unique argument à fournir, str, est la chaine de caractères que doit afficher l'étiquette. Pour changer ce texte une fois l'étiquette créée, on fera appel à la méthode :

  etiquette.set_text(str)

etiquette est l'etiquette précédemment créée, et str la nouvelle chaine de caractères. L'espace alloué à la nouvelle chaine sera automatiquement ajusté si nécessaire. Vous pouvez créer une étiquette de plusieurs lignes en insérant des sauts de lignes dans la chaine de caractères.

Pour récupérer la chaine courante, faites :

  chaine = etiquette.get_text()

etiquette est l'étiquette que vous avez créée, et chaine la chaine de caractères. On peut définir le type d'alignement du texte d'une étiquette avec :

  etiquette.set_justify(jtype)

L'argument jtype peut prendre les valeurs suivantes :

  JUSTIFY_LEFT		# aligné à gauche
  JUSTIFY_RIGHT		# aligné à droite
  JUSTIFY_CENTER	# centré (valeur par défaut)
  JUSTIFY_FILL		# justifié

Le texte des étiquettes peut aussi être renvoyé à la ligne automatiquement. Il faut pour cela utiliser cette méthode :

  etiquette.set_line_wrap(wrap)

L'argument wrap peut prendre les valeurs TRUE (activé) ou FALSE (désactivé).

Pour que le texte de votre étiquette soit souligné, vous pouvez lui fournir un patron à suivre :

  etiquette.set_pattern(pattern)

L'argument pattern (patron) précise le profil du soulignement. Il s'agit d'une chaine de caractères constituée de "_" et d'espaces, un "_" indiquant que le caractère correspondant de l'étiquette doit être souligné. Par exemple, la chaine "__ __" soulignerait les deux premiers caractères ainsi que le huitième et le neuvième. Si vous voulez simplement définir un raccourci clavier souligné (un caractère "mnémonique") dans votre étiquette, utilisez plutôt la méthode set_text_with_mnemonic (str), et non set_pattern().

Le programme etiquettes.py est un court exemple qui illustre ces méthodes. Pour mieux distinguer les différents styles d'étiquettes, il utilise des cadres (pas encore traduit) (gtk.Frame). N'en tenez cependant pas compte pour l'instant, nous aborderons ce widget plus loin.

Les étiquettes de GTK+ 2.0 peuvent être sélectionnées (pour le copier-coller), et leur texte peut contenir des balises qui modifient la police et d'autres attributs de texte. Ces caractéristiques avancées ne seront toutefois pas abordées ici.

La figure 9.1 montre la fenêtre affichée par le programme etiquettes.py :

Figure 9.1. Exemples d'étiquettes

exemple étiquette

Le code source du programme est le suivant :

     1   #!/usr/bin/env python
     2     
     3   # exemple etiquettes.py
     4   
     5   import pygtk
     6   pygtk.require('2.0')
     7   import gtk
     8   
     9   class Etiquettes:
    10       def __init__(self):
    11           self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    12           self.fenetre.connect("destroy", gtk.main_quit)
    13   
    14           self.fenetre.set_title("Etiquettes")
    15           boite_v = gtk.VBox(False, 5)
    16           boite_h = gtk.HBox(False, 5)
    17           self.fenetre.add(boite_h)
    18           boite_h.pack_start(boite_v, False, False, 0)
    19           self.fenetre.set_border_width(5)
    20   
    21           cadre = gtk.Frame("Etiquette normale")
    22           etiquette = gtk.Label("Voici une etiquette normale")
    23           cadre.add(etiquette)
    24           boite_v.pack_start(cadre, False, False, 0)
    25     
    26           cadre = gtk.Frame("Etiquette de plusieurs lignes")
    27           etiquette = gtk.Label("Voici une etiquette de plusieurs lignes.\nDeuxieme ligne\n"
    28                                 "Troisieme ligne")
    29           cadre.add(etiquette)
    30           boite_v.pack_start(cadre, False, False, 0)
    31     
    32           cadre = gtk.Frame("Etiquette alignee a gauche")
    33           etiquette = gtk.Label("Voici une etiquette de plusieurs lignes\n"
    34                                 "dont le texte est aligne a gauche.\nTroisieme      ligne")
    35           etiquette.set_justify(gtk.JUSTIFY_LEFT)
    36           cadre.add(etiquette)
    37           boite_v.pack_start(cadre, False, False, 0)
    38     
    39           cadre = gtk.Frame("Etiquette alignee a droite")
    40           etiquette = gtk.Label("Voici une etiquette de plusieurs lignes\ndont le texte est aligne a droite.\n"
    41                                 "Quatrieme ligne, (j/k)")
    42           etiquette.set_justify(gtk.JUSTIFY_RIGHT)
    43           cadre.add(etiquette)
    44           boite_v.pack_start(cadre, False, False, 0)
    45   
    46           boite_v = gtk.VBox(False, 5)
    47           boite_h.pack_start(boite_v, False, False, 0)
    48           cadre = gtk.Frame("Etiquette avec retour a la ligne auto")
    49           etiquette = gtk.Label("Voici un exemple d'etiquette avec retour a la ligne auto.  Elle "
    50                                 "ne doit pas remplir l'espace qui lui est             "
    51                                 "alloue, mais elle s'ajuste automatiquement "
    52                                 "en renvoyant les mots a la ligne.  "
    53                                 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
    54                                 "do eiusmod tempor incididunt ut labore et dolore magna aliqua.  "
    55                                 "Seize jacinthes sechent dans seize sachets secs.\n"
    56                                 "     Ces etiquettes peuvent contenir plusieurs paragraphes "
    57                                 "et ajoutent   correctement "
    58                                 "de nombreux          espaces supplementaires ")
    59           etiquette.set_line_wrap(True)
    60           cadre.add(etiquette)
    61           boite_v.pack_start(cadre, False, False, 0)
    62     
    63           cadre = gtk.Frame("Etiquette justifiee avec retour a la ligne auto")
    64           etiquette = gtk.Label("Voici un exemple d'etiquette justifiee avec retour a la ligne auto.  "
    65                                "Elle doit remplir "
    66                                "entierement              l'espace qui lui est alloue.  "
    67                                "Quelques phrases pour les besoins de la "
    68                                "demonstration :  Voila, voila. Le lundi au soleil, "
    69                                "c'est une chose qu'on n'aura jamais, ta la la ta da la la...\n"
    70                                "    Nouveau paragraphe.\n"
    71                                "    Nouveau paragraphe, mais mieux que"
    72                                " l'autre.  Helas, il est deja fini.
    73                                ")
    74           etiquette.set_justify(gtk.JUSTIFY_FILL)
    75           etiquette.set_line_wrap(True)
    76           cadre.add(etiquette)
    77           boite_v.pack_start(cadre, False, False, 0)
    78     
    79           cadre = gtk.Frame("Etiquette avec texte souligne")
    80           etiquette = gtk.Label("Cette etiquette comporte du texte souligne !\n"
    81                                 "Cette phrase est bizarrement soulignee")
    82           etiquette.set_justify(gtk.JUSTIFY_LEFT)
    83           etiquette.set_pattern(
    84               "____________________________________________ _ _________ _ ______     __ _______ ___")
    85           cadre.add(etiquette)
    86           boite_v.pack_start(cadre, False, False, 0)
    87           self.fenetre.show_all ()
    88   
    89   def main():
    90       gtk.main()
    91       return 0
    92   
    93   if __name__ == "__main__":
    94       Etiquettes()
    95       main()

À noter que le "Etiquette justifiee avec retour a la ligne auto" n'est pas rempli.