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

Chapitre 6. Les boutons

Sommaire

6.1. Les boutons simples
6.2. Les boutons à bascule
6.3. Les cases à cocher
6.4. Les boutons radio

6.1. Les boutons simples

Nous avons pratiquement déjà fait le tour du widget bouton. Il est en effet très simple. Lors de la création d'un bouton avec la fonction gtk.Button(), vous pouvez lui donner une étiquette en lui passant une chaine de caractères. Mais vous pouvez tout aussi bien créer un bouton vierge en ne passant rien à la fonction ; il vous suffira ensuite, si vous le souhaitez, de placer une étiquette ou une image pixmap dans ce nouveau bouton. Pour ce faire, créez une nouvelle boite et placez-y vos objets avec l'habituelle pack_start(). Puis, avec add(), placez la boite dans le bouton.

La fonction de création des boutons est la suivante :

  bouton = gtk.Button(label=None, stock=None)

Si l'on donne une chaine de caractères à l'argument label, elle sera affichée sur le bouton. L'argument stock, quant à lui, sert à afficher sur le bouton une icône du stock de GTK ainsi que le texte correspondant. Les éléments du stock sont :

  STOCK_DIALOG_INFO
  STOCK_DIALOG_WARNING
  STOCK_DIALOG_ERROR
  STOCK_DIALOG_QUESTION
  STOCK_DND
  STOCK_DND_MULTIPLE
  STOCK_ADD
  STOCK_APPLY
  STOCK_BOLD
  STOCK_CANCEL
  STOCK_CDROM
  STOCK_CLEAR
  STOCK_CLOSE
  STOCK_CONVERT
  STOCK_COPY
  STOCK_CUT
  STOCK_DELETE
  STOCK_EXECUTE
  STOCK_FIND
  STOCK_FIND_AND_REPLACE
  STOCK_FLOPPY
  STOCK_GOTO_BOTTOM
  STOCK_GOTO_FIRST
  STOCK_GOTO_LAST
  STOCK_GOTO_TOP
  STOCK_GO_BACK
  STOCK_GO_DOWN
  STOCK_GO_FORWARD
  STOCK_GO_UP
  STOCK_HELP
  STOCK_HOME
  STOCK_INDEX
  STOCK_ITALIC
  STOCK_JUMP_TO
  STOCK_JUSTIFY_CENTER
  STOCK_JUSTIFY_FILL
  STOCK_JUSTIFY_LEFT
  STOCK_JUSTIFY_RIGHT
  STOCK_MISSING_IMAGE
  STOCK_NEW
  STOCK_NO
  STOCK_OK
  STOCK_OPEN
  STOCK_PASTE
  STOCK_PREFERENCES
  STOCK_PRINT
  STOCK_PRINT_PREVIEW
  STOCK_PROPERTIES
  STOCK_QUIT
  STOCK_REDO
  STOCK_REFRESH
  STOCK_REMOVE
  STOCK_REVERT_TO_SAVED
  STOCK_SAVE
  STOCK_SAVE_AS
  STOCK_SELECT_COLOR
  STOCK_SELECT_FONT
  STOCK_SORT_ASCENDING
  STOCK_SORT_DESCENDING
  STOCK_SPELL_CHECK
  STOCK_STOP
  STOCK_STRIKETHROUGH
  STOCK_UNDELETE
  STOCK_UNDERLINE
  STOCK_UNDO
  STOCK_YES
  STOCK_ZOOM_100
  STOCK_ZOOM_FIT
  STOCK_ZOOM_IN
  STOCK_ZOOM_OUT

Le programme boutons.py donne un exemple d'utilisation de gtk.Button() pour créer un bouton contenant une image et une étiquette. Le code de création de la boite est séparé du reste afin que vous puissiez l'utiliser dans vos programmes. Nous verrons d'autres exemples faisant appel à des images un peu plus loin dans ce tutoriel. La figure 6.1 montre la fenêtre et son bouton qui contient une étiquette et une image pixmap :

Figure 6.1. Bouton avec étiquette et image pixmap

Voici le code source du programme boutons.py :

     1   #!/usr/bin/env python
     2   
     3   # exemple boutons.py
     4   
     5   import pygtk
     6   pygtk.require('2.0')
     7   import gtk
     8   
     9   # On cree une boite verticale, on y place une image 
    10   # et une etiquette, et on renvoie la boite.
    11   
    12   def boite_xpm_etiquette(parent, fichier_xpm, texte_etiquette):
    13       # On cree une boite pour la pixmap et l'etiquette
    14       boite1 = gtk.HBox(False, 0)
    15       boite1.set_border_width(2)
    16   
    17       # A present l'image.
    18       image = gtk.Image()
    19       image.set_from_file(fichier_xpm)
    20   
    21       # On cree une etiquette pour le bouton.
    22       etiquette = gtk.Label(texte_etiquette)
    23   
    24       # On place la pixmap et l'etiquette dans la boite.
    25       boite1.pack_start(image, False, False, 3)
    26       boite1.pack_start(etiquette, False, False, 3)
    27   
    28       image.show()
    29       etiquette.show()
    30       return boite1
    31   
    32   class Bouton:
    33       # Notre methode de rappel habituelle.
    34       def salut(self, widget, donnees=None):
    35           print "Salut ! - Clic sur le %s." % donnees
    36   
    37       def __init__(self):
    38           # Creation d'une nouvelle fenetre.
    39           self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    40   
    41           self.fenetre.set_title("Bouton et image")
    42   
    43           # C'est une bonne idee de faire ceci pour chaque fenetre.
    44           self.fenetre.connect("destroy", lambda wid: gtk.main_quit())
    45           self.fenetre.connect("delete_event", lambda a1,a2: gtk.main_quit())
    46   
    47           # On fixe la largeur des bordures de la fenetre.
    48           self.fenetre.set_border_width(10)
    49   
    50           # Creation d'un nouveau bouton.
    51           bouton = gtk.Button()
    52   
    53           # On connecte le signal "clicked" du bouton a la fonction de rappel
    54           bouton.connect("clicked", self.salut, "bouton cool")
    55   
    56           # Ceci appelle notre fonction de creation de boites.
    57           boite1= boite_xpm_etiquette(self.fenetre, "info.xpm", "bouton cool")
    58   
    59           # On place et on affiche tous nos widgets.
    60           bouton.add(boite1)
    61   
    62           boite1.show()
    63           bouton.show()
    64   
    65           self.fenetre.add(bouton)
    66           self.fenetre.show()
    67   
    68   def main():
    69       gtk.main()
    70       return 0     
    71   
    72   if __name__ == "__main__":
    73       Bouton()
    74       main()

De la ligne 12 à la ligne 32, on définit la fonction boite_xpm_etiquette() qui prend en charge la création d'une boite horizontale avec une bordure de 2 (lignes 14-15), puis y place une image (lignes 25) et une étiquette (ligne 26).

Aux lignes 32-66, on définit la classe Bouton. La méthode constructeur s'étale de la ligne 38 à la ligne 66 ; elle crée une fenêtre (ligne 39), lui donne un titre (ligne 41), connecte les signaux "delete_event" et "destroy" (lignes 44-45). Puis, à la ligne 51, elle crée le bouton sans étiquette, avant de connecter son signal "clicked" à la méthode de rappel salut() (ligne 54). Enfin, elle appelle la fonction boite_xpm_etiquette() à la ligne 57, afin de créer l'image et l'étiquette qu'elle placera dans le bouton à la ligne 60.

La fonction boite_xpm_etiquette() pourrait être utilisée pour placer des images pixmap et des étiquettes dans n'importe quel widget pouvant jouer le rôle de conteneur.

Le widget bouton peut émettre les signaux suivants :

      pressed - émis lorsque le bouton de la souris est enfoncé sur le widget

      released - émis lorsque le bouton de la souris est relâché sur le widget

      clicked - émis lorsque le bouton de la souris est enfoncé puis relâché sur le widget

      enter - émis lorsque le pointeur de la souris arrive sur le widget

      leave - émis lorsque le pointeur de la souris quitte le widget