GtkFr - Cours Gtk+-2

PyLesBox

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


Les Box

1. Présentation

Vous avez sûrement dû essayer de mettre plusieurs widgets dans une fenêtre mais sans succès. Cela est dû au fait qu'un widget de type GtkContainer ne peut contenir qu'un seul widget. La solution à ce problème est l'utilisation des widgets de type GtkBox qui permettent d'inclure plusieurs widgets à l'intérieur.
Il existe deux catégories de GtkBox :

1.1 Hiérarchie

GObject -> GtkObject -> GtkWidget -> GtkContainer -> GtkBox -> GtkHBox
GObject -> GtkObject -> GtkWidget -> GtkContainer -> GtkBox -> GtkVBox

2. Utilisation de base

2.1 Création

Comme toujours, la création de ces widgets est très simple. Les fonctions suivantes permettent de créer respectivement une GtkHBox et une GtkVBox :
hbox = gtk.HBox(homogeneous, spacing)
vbox = gtk.VBox(homogeneous, spacing)
Le paramètre homogeneous définit si tous les widgets contenus dans la GtkBox utilisent un espace équivalent. C'est à dire que si ce paramètre est à True, la zone d'affichage de la GtkBox sera divisée en x zone(s) de taille égale (x étant le nombre de widgets contenus).
Le paramètre spacing permet de définir l'espacement entre chacun des widgets contenus.

2.2 Ajout de widget

Avant de pouvoir ajouter un widget dans une GtkHBox ou GtkVBox, il faut savoir que pour une GtkBox il existe la notion de premier et de dernier widget. Nous allons donc pouvoir ajouter des widgets soit par le début soit par la fin avec une de ces deux méthodes :
box.pack_start(child, expand, fill, padding)
box.pack_end(child, expand, fill, padding)
La première méthode ajoute les widgets de haut en bas et la deuxième de bas en haut.
Pour les paramètres, ce sont les mêmes pour les deux méthodes. Le paramètre child est le widget qui va être ajouté à la box.
Le deuxième paramètre expand nécessite un petite explication. Nous ne le voyons pas ici, mais lors de la création d'une GtkHBox ou GtkVBox, il faut définir une propriété appelée homogeneous. Cette propriété détermine si les widgets qui sont à l'intérieur de la GtkBox vont se partager l'intégralité de l'espace fourni, ou alors réserver uniquement la place qui leur est nécessaire.
Petit exemple, nous avons un espace de 3 pixel dans lequel nous voulons insérer deux widgets de 1 pixel. Si le paramètre homogeneous est à True, chaque widget réservera un espace de 1.5 pixel. Au contraire si il est à False, chaque widget réservera un espace de 1 pixel, laissant donc un espace libre de 1 pixel à la fin.
Revenons donc au paramètre expand. Si la GtkBox est homogène, la valeur de ce paramètre n'a aucune importance. Par contre si la GtkBox n'est pas homogène, le fait de mettre expand à True à un widget va lui permettre de partager l'espace restant dans la GtkBox avec les autres widgets qui auront été insérés avec expand à True.
Reprenons notre exemple. La GtkBox n'est pas homogène, donc normalement chaque widget va réserver 1 pixel de l'espace. Si nous mettons le premier widget avec expand à True et le deuxième avec expand à False, le deuxième widget réservera un espace de 1 pixel, le premier aussi mais il doit se partager l'espace libre (1 pixel) avec les autres widgets qui ont aussi la propriété expand à True. Comme il est tout seul avec cette propriété, il va donc réserver 2 pixel.
Le paramètre fill permet de définir si le widget enfant occupe toute la zone qui lui est réservée.
Et enfin, le paramètre padding permet d'ajouter de l'espace autour du widget.
Voici quelques exemples avec différentes valeurs pour ces paramètres :


homogeneous=True ; Bouton 1 : fill=False ; Bouton 2 : fill=False


homogeneous=True ; Bouton 1 : fill=False ; Bouton 2 : fill=True


homogeneous=False ; Bouton 1 : expand=False ; Bouton 2 : expand=False


homogeneous=False ; Bouton 1 : expand=False ; Bouton 2 : expand=True - fill=False


homogeneous=False ; Bouton 1 : expand=False ; Bouton 2 : expand=True - fill=True

2.3 Programme exemple

Pour ce chapitre, nous allons insérer quatre boutons dans une GtkHBox et une GtkVBox afin d'étudier les fonctions d'ajout du widget GtkBox.
# -*- Encoding: Latin-1 -*-
import gtk

def main():
    boutons = []

    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("Les GtkBox")
    window.set_default_size(320, 200)
    window.connect("destroy", gtk.main_quit, None)

    # Creation de la GtkBox verticale
    vbox = gtk.VBox(True, 0)
    # Ajout de la GtkVBox dans la fenetre
    window.add(vbox)

    # Creation des boutons
    for i in range(4):
        boutons.append( gtk.Button("Bouton %d" % (i+1)) )

    # Ajout de Bouton 1 dans la GtkVBox
    vbox.pack_start(boutons[0], True, False, 0)

    # Creation de la box horizontale
    hbox = gtk.HBox(True, 0)

    # Ajout de la GtkHBox dans la GtkVBox
    vbox.pack_start(hbox, True, True, 0)

    # Ajout des boutons 2 et 3 dans la GtkHBox
    hbox.pack_start(boutons[1], True, True, 0)
    hbox.pack_start(boutons[2], True, False, 0)

    # Ajout du dernier bouton dans la GtkVBox
    vbox.pack_start(boutons[3], True, True, 0)

    window.show_all()

    gtk.main()

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



<< Les boutons (Partie 1) PyGtk Les tables >>

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