Sunteți pe pagina 1din 5

Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?

page=page_7

Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts
p
u
Developpez.com b
l
i
Club des dveloppeurs et IT pro c
i
t
Plus de 4 millions de visiteurs uniques par mois

Accueil ALM Java .NET Dv. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systmes

Accueil C Forums C FAQ C Tutoriels C Livres C Compilateurs et outils C Sources C Bibliothques C GTK+

ACCUEIL GTK+ FORUM GTK+ FAQ GTK+ TUTORIELS GTK+ SOURCES GTK+ BIBLIOTHEQUES LIVRES GTK+ OUTILS GTK+

Cours GTK 2

Table des matires

VII. Les tables


VII-A. Introduction
VII-B. Utilisation du widget
GtkTable.
VII-B-1. Cration.
VII-B-2. Insertion de
widget.
VII-B-3. Modifier la table
VII-B-4. Exemple
VII-B-5. Programme
exemple
VII-C. En savoir plus
VII-C-1. Fonctions
documentes

VII. Les tables


Dans la famille des containers, voil srement le widget le plus intressant. En effet il
peut tre parfois douloureux de placer correctement son interface avec l'utilisation de
plusieurs GtkBox. Le widget GtkTable est conu pour rsoudre ce problme car il
utilise une grille invisible pour attacher les widgets mais sans pour autant perdre la
puissance de GTK+ avec le redimensionnement automatique.

VII-A. Introduction

Au moment de la cration de la GtkTable, nous allons spcifier le nombre de lignes et


de colonnes, puis y placer les lments avec 3 principales caractristiques :

La position de dpart et de fin de l'lment par rapport aux lignes ;


La position de dpart et fin de l'lment par rapport aux colonnes ;
La faon de ragir du widget (remplir la zone, agrandir, etc.).

Reprenons l'exemple que nous avons cr dans le chapitre prcdent sur les GtkBox.
Nous avons cr une fentre contenant quatre boutons :

Pour faire cela sans GtkTable, nous avons d crer deux GtkBox, une premire
verticale, puis une deuxime horizontale dans laquelle nous avons plac les boutons
2 et 3, puis ajouter le quatrime bouton dans la premire GtkBox (verticale), voila
beaucoup de travail pour pas grand-chose.

Avec le widget GtkTable, la premire chose faire sera de choisir le nombre de lignes
et de colonnes sur cette grille. Dans notre cas, il s'agit d'une grille trois lignes et

1 sur 5 05/08/2015 05:22


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_7

deux colonnes :

Ensuite il suffit de placer nos boutons sur cette grille, en spcifiant en premier les
points de dpart et d'arrive suivant les colonnes puis suivant les lignes :

Bouton 1 : de 0 2 suivant les colonnes et de 0 1 suivant les lignes -> (0, 2,


0, 1) ;
Bouton 2 : de 0 1 suivant les colonnes et de 1 2 suivant les lignes -> (0, 1,
1, 2) ;
Bouton 3 : de 1 2 suivant les colonnes et de 1 2 suivant les lignes -> (1, 2,
1, 2) ;
Bouton 4 : de 0 2 suivant les colonnes et de 2 3 suivant les lignes -> (0, 2,
2, 3).

Comme vous pouvez le constater, on ne donne pas la longueur et la largeur du


widget, mais sa position finale sur la grille. Cela devient nettement plus facile et
naturel de positionner les widgets sur une grille, car si ici nous ne gagnons que deux
oprations par rapport la mthode GtkBox, cette valeur s'lve trs vite quand il
s'agit de placer plus de 4 boutons. Aprs ces quelques explications, voyons comment
programmer cela.

VII-B. Utilisation du widget GtkTable.

VII-B-1. Cration.

La fonction de cration est :

Slectionnez
GtkWidget* gtk_table_new(guint rows, guint columns, gboolean homogeneous);

Les paramtres rows et columns permettent de dfinir respectivement le nombre de


lignes et de colonnes de la grille. Le paramtre homogeneous quant lui dfinit,
comme pour une GtkBox, si tous les widgets contenus dans la GtkTable utilisent un
espace quivalent.

VII-B-2. Insertion de widget.

La premire fonction tudie est :

Slectionnez
void gtk_table_attach( GtkTable *table, GtkWidget *child,

guint left_attach, guint right_attach,

guint top_attach, guint bottom_attach,

GtkAttachOptions xoptions, GtkAttachOptions yoptions,

guint xpadding, guint ypadding);

premire vue, cette fonction peut apparatre complique, mais elle est en ralit
trs simple. Le paramtre child reprsente le widget attacher la grille, les
paramtres left_attach et right_attach, les positions gauche et droite du widget et
les paramtres top_attach et bottom_attach, les positions suprieures et infrieures
du widget.

Les paramtres xoptions et yoptions permettent de spcifier respectivement la faon


dont le widget ragit horizontalement et verticalement au redimensionnement de la
GtkTable. Ces paramtres peuvent prendre 3 valeurs (que l'on peut associer) :

GTK_EXPAND : spcifie que cette section de la grille s'tirera pour remplir


l'espace disponible ;
GTK_SHRINK : dtermine ce qui se produira s'il y a un espace insuffisant pour
rpondre la requte de taille du widget enfant, alors le widget se voit attribu
une allocation rduite, ce qui peut entraner un effet de bords coups ;
GTK_FILL : spcifie que le widget enfant s'tirera pour remplir l'espace
disponible, important que si GTK_EXPAND est dfini.

Les deux derniers paramtres xpadding et ypadding dfinissent l'espace


supplmentaire ajouter aux bords du widget ( droite et gauche pour le premier,

2 sur 5 05/08/2015 05:22


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_7

au-dessus et en dessous pour le second).

Regardons maintenant les effets des paramtres xoptions et yoptions suivant


diffrentes valeurs :

Valeurs de xoptions et yoptions Rsultat

xoptions = GTK_EXPAND
yoptions = GTK_EXPAND

xoptions = GTK_EXPAND |
GTK_FILL
yoptions = GTK_EXPAND

xoptions = GTK_EXPAND
yoptions = GTK_EXPAND |
GTK_FILL

xoptions = GTK_EXPAND |
GTK_FILL
yoptions = GTK_EXPAND |
GTK_FILL

La deuxime fonction est :

Slectionnez
void gtk_table_attach_defaults(GtkTable *table, GtkWidget *child,
guint left_attach, guint right_attach,
guint top_attach, guint bottom_attach );

Ceci est la version simplifie de la premire fonction car elle dfinit automatiquement
les paramtres xoptions et yoptions GTK_EXPAND | GTK_FILL et les paramtres
xpadding et ypadding 0.

VII-B-3. Modifier la table

Il est possible de changer la taille de la grille aprs sa cration l'aide de cette


fonction :

Slectionnez
void gtk_table_resize(GtkTable *table, guint rows, guint columns);

Le paramtre table est la GtkTable modifier, et les paramtres rows et columns les
nouveaux nombres de lignes et de colonnes.

Ces deux fonctions permettent de changer l'espace d'une ligne ou d'une colonne
spcifique :

Slectionnez
gtk_table_set_row_spacing(GtkTable *table, guint row, guint spacing);
gtk_table_set_col_spacing(GtkTable *table, guint column, guint spacing);

La premire dfinit l'espace autour d'une ligne tandis que la deuxime fait la mme
chose pour une colonne.

Celles-ci ont le mme rle que les deux prcdentes fonctions, mais agissent sur
l'ensemble de la GtkTable :

Slectionnez
gtk_table_set_row_spacings(GtkTable *table, guint spacing);
gtk_table_set_col_spacings(GtkTable *table, guint spacing);

Et pour connatre ces espacements nous avons quatre fonctions diffrentes :

3 sur 5 05/08/2015 05:22


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_7

Slectionnez
guint gtk_table_get_row_spacing(GtkTable *table, guint row);
guint gtk_table_get_col_spacing(GtkTable *table, guint column);
guint gtk_table_get_default_row_spacing(GtkTable *table);
guint gtk_table_get_default_col_spacing(GtkTable *table);

Les deux premires fonctions permettent de connatre l'espace entre ligne numro
row (ou la colonne numro column) et sa suivante. Les deux autres fonctions quant
elles, renvoient la valeur par dfaut des espacements, c'est--dire la valeur qui sera
utilis au prochain ajout d'un widget.

VII-B-4. Exemple

Nous allons utiliser le mme exemple que dans le chapitre sur les GtkBox, pour bien
montrer la diffrence au niveau du code.

VII-B-5. Programme exemple

Slectionnez
#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)


{
GtkWidget *pWindow;
GtkWidget *pTable;
GtkWidget *pButton[4];

gtk_init(&argc, &argv);

pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkTable");
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

/* Creation et insertion de la table 3 lignes 2 colonnes */


pTable=gtk_table_new(3,2,TRUE);
gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable));

/* Creation des boutons */


pButton[0]= gtk_button_new_with_label("Bouton 1");
pButton[1]= gtk_button_new_with_label("Bouton 2");
pButton[2]= gtk_button_new_with_label("Bouton 3");
pButton[3]= gtk_button_new_with_label("Bouton 4");

/* Insertion des boutons */


gtk_table_attach(GTK_TABLE(pTable), pButton[0],
0, 2, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND,
0, 0);
gtk_table_attach_defaults(GTK_TABLE(pTable), pButton[1],
0, 1, 1, 2);
gtk_table_attach(GTK_TABLE(pTable), pButton[2],
1, 2, 1, 2,
GTK_EXPAND, GTK_EXPAND | GTK_FILL,
0, 0);
gtk_table_attach_defaults(GTK_TABLE(pTable), pButton[3],
0, 2, 2, 3);

gtk_widget_show_all(pWindow);

gtk_main();

return EXIT_SUCCESS;
}

Rsultat :

VII-C. En savoir plus

VII-C-1. Fonctions documentes

Slectionnez
void gtk_table_set_homogeneous( GtkTable *table, gboolean homogeneous );

4 sur 5 05/08/2015 05:22


Cours GTK 2 http://gtk.developpez.com/cours/gtk2/?page=page_7

Permet de dfinir si la table est homogne ou pas.

Entre(s) :

table : la GtkTable.
homogeneous : TRUE si l'on veut que table soit homogne, FALSE sinon.

Sortie : rien.

Slectionnez
gboolean gtk_table_get_homogeneous(GtkTable *table);

Permet de savoir si la table est homogne.

Entre(s) :

table : la GtkTable.

Sortie : TRUE si table est homogne, FALSE sinon.

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre
convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge
par les droits d'auteur. Copyright 2013 developpez. Aucune reproduction, mme partielle,
ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans
de prison et jusqu' 300 000 de dommages et intrts.

Responsable bnvole de la rubrique GTK+ : Francis Walter - Contacter par email

Nous contacter Participez Hbergement Informations lgales Partenaire : Hbergement Web


Copyright 2000-2015 - www.developpez.com

5 sur 5 05/08/2015 05:22

S-ar putea să vă placă și