Intéressons-nous à présent à un autre moyen de placer les widgets, qui peut se révéler extêmement utiles dans certaines occasions : les tableaux.
Avec les tableaux, on crée une grille dans laquelle on peut placer des widgets. Ces derniers peuvent occuper autant d'espace que nous le voulons.
Examinons tout d'abord la fonction gtk.Table() :
tableau = gtk.Table(rows=1, columns=1, homogeneous=FALSE)
Le premier argument est le nombre de lignes (rows) souhaitées dans le tableau, et le deuxième le nombre de colonnes (columns).
L'argument homogeneous concerne l'homogénéité ou pas des cellules du tableau. S'il vaut TRUE, les cellules feront toutes la même taille : celle du plus grand widget dans le tableau. S'il vaut FALSE, la largeur d'une cellule sera dictée par le widget le plus large de la colonne, et sa hauteur par le widget le plus haut de la ligne.
Les lignes et les colonnes sont numérotées de 0 à n, n étant le nombre spécifié lors de l'appel à gtk.Table(). Donc, en donnant rows=2 et columns=2, on obtient un tableau qui peut être schématisé ainsi :
0 1 2 0+----------+----------+ | | | 1+----------+----------+ | | | 2+----------+----------+
Notez que le système de coordonnées commence dans le coin supérieur gauche. Pour placer un widget dans une cellule, on utilisera la méthode suivante :
tableau.attach(child, left_attach, right_attach, top_attach, bottom_attach, xoptions=EXPAND|FILL, yoptions=EXPAND|FILL, xpadding=0, ypadding=0)
L'instance tableau est le tableau créé avec gtk.Table(). Le premier paramètre, child (enfant), est le widget que vous souhaitez placer dans le tableau.
Les arguments left_attach (point d'attache gauche), right_attach (point d'attache droit), top_attach (point d'attache haut) et bottom_attach (point d'attache bas) indiquent où placer le widget et combien de cellules il doit occuper. Si l'on veut mettre un bouton dans la cellule inférieure droite de notre tableau 2x2, et s'il ne doit occuper QUE cette cellule, il faudra donner à ces arguments les valeur suivantes : left_attach = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.
Maintenant, si l'on veut qu'un widget occupe toute la première ligne de notre tableau 2x2, on doit donner left_attach = 0, right_attach = 2, top_attach = 0, bottom_attach = 1.
Les paramètres xoptions et yoptions servent à spécifier une ou plusieurs (avec un OU logique) options de placement.
Ces options sont :
FILL | Si la cellule est plus large que le widget et que FILL est spécifié, le widget s'étirera jusqu'à occuper tout l'espace disponible dans la cellule. |
SHRINK | Quand le tableau ne dispose pas de suffisamment d'espace pour afficher les widgets (par exemple lors d'un redimensionnement de la fenêtre par l'utilisateur), ces derniers sont normalement éjectés vers le bas de la fenêtre et disparaissent. Si SHRINK est spécifié, les widgets rétréciront avec le tableau. |
EXPAND | Si cette option est spécifiée, la cellule s'étirera jusqu'à occuper toute la place restant dans l'espace attribué au tableau. |
Comme pour les boites de placement, les paramètres de padding créent une zone vide, spécifiée en pixels, autour du widget.
Deux autres méthodes, set_row_spacing() et set_col_spacing(), nous permettent de définir des espacements entre des lignes ou des colonnes :
tableau.set_row_spacing(row, spacing)
et
tableau.set_col_spacing(column, spacing)
Pour les colonnes (column), l'espacement (spacing) sera appliqué à la droite de la colonne spécifiée ; pour les lignes (rows) ce sera au dessous de la ligne spécifiée.
On peut aussi fixer en une fois un même espacement pour toutes les lignes et/ou colonnes du tableau :
tableau.set_row_spacings(spacing)
et
tableau.set_col_spacings(spacing)
Notez qu'avec ces appels la dernière ligne et la dernière colonne ne reçoivent aucun espacement.