next up previous contents
suivant: Signaux et Évènements monter: Tour d'horizon précédent: Goodbye World   Table des matières


Sous-sections

Tour d'horizon

Créer un widget

Les différentes étapes pour créer un widget sont :

show() permet à Gtk-Perl de savoir que nous avons définis les attributs du widget et qu'ils sont prêts à être utilisés. Vous pouvez aussi utiliser hide() pour le faire disparaître. L'ordre dans lequel vous faites apparaître les widgets n'est pas important, mais je vous conseille de montrer la fenêtre en dernier ce qui lui permet d'apparaître d'un coup plutôt que d'apparaître morceaux par morceaux. Les enfants d'un widget ( souvenez-vous qu'une fenêtre est également un widget ) ne seront disposés que quand leurs parents seront rendus visibles à l'aide de la fonction show().

La hiérarchie des widgets

Pour vos références, voici l'arbre de hiérarchie de classes utilisé pour implémenter les widgets.

La connaissance de cette hiérarchie est très utile car elle nous indique les fonctions disponibles pour chaque widget. Par exemple, le spinbutton hérite de toutes les fonctions disponibles pour la classe Entry qui hérite elle-même de la classe Editable et ainsi de suite.

Les widgets sans fenêtre

Les widgets suivants n'ont pas de fenêtre associée. Si vous voulez capturer des évènements, vous devrez utilisez la `` boîte à évènements''.

Nous continuerons notre exploration de GTK en examinant chaque widget tout à tour, en créant quelques fonctions simples afin de les présenter. Une autre source d'exemples se trouve également dans les sources de Gtk-Perl.

Créer et détruire des widgets

Pour créer un widget, utilisez :

Cela crée une instance de la classe widget. Noter que certains widgets peuvent avoir plus d'une fonction new() ( comme la fonction new_with_label() pour les boutons et les arbres ). Heureusement, comme Gtk-Perl devient plus mature, l'usage de ces fonctions devient optionnel comme c'est déjà le cas avec new_with_label() pour les boutons.

La destruction d'un widget s'obtient par :

Si ce widget possède une fonction de rappel enregistrée pour le signal ``destroy'', ce retour sera appelé, ainsi on ne peut empêcher l'objet d'être détruit. Pour des informations sur les rappels, voir la section sur 'signaux et rappels''.

Montrer et cacher des widgets

Les formes suivants sont plutôt simples et nous en avons déjà rencontrées sous une forme ou une autre.

Noter que si un conteneur qui contient un widget n'est pas montré, alors le widget ne sera visible que lorsque le conteneur le deviendra. Il est recommandé que les widgets soient montrés avant leurs contenants bien que l'ordre exact n'importe pas tant que l'on montre la fenêtre en dernier. Pour les fainéants, la fonction show_all() montre tous les widgets et ce qu'ils contiennent. Ce qui en pratique pour les conteneurs.

Réaliser un widget

Ces fonctions vont réaliser un widget ou non :

La réalisation est nécessaire quand vous voulez qu'un widget utilise une fenêtre GdkWindow pour accéder à un serveur X. Normalement, la réalisation est faite quand vous appelez la fonction show() mais parfois vous devrez appeler la fonction realize() avant show(). En règle générale, si vous utilisez realize(), c'est que vous voulez vous assurer que vous appréhender correctement le problème et que c'est la meilleure manière de s'y prendre.

Les accélérateurs

Les fonctions suivantes seront définies plus tard dans le chapitre ``accélérateurs clavier''.

Activer les widgets

La fonction suivante enverra le signal ``activé'' à un widget :

Si un widget possède un rappel enregistré pour le signal ``activé'', ce rappel sera appelé, bien que cela ne puisse empêcher l'objet d'être détruit. Pour des informations sur les rappels, voir la section sur 'signaux et rappels''.

Réafilier un widget

La fonction suivante changera les parents du widget :

Je ne pense pas que cette fonction vous soit utile, toujours est-il qu'elle existe si vous en avez besoin !

Choix d'un widget ou widget par défaut

Gtk-Perl permet à un widget d'être celui concerné par les évènements. Par exemple, quand on a une fenêtre de dialogue avec un bouton oui et un bouton non, on peut vouloir faire en sorte que, quand on appuie sur la touche entrée, cela revient à cliquer sur le bouton oui. Pour cela il faut utiliser la fonction suivante :

Un widget peut aussi se définir comme widget par défaut à l'aide des fonctions :

Noter que vous devrez toujours appeler can_default() avant grab_default(). L'argument de can_default() est une valeur vraie ou fausse qui détermine si , oui ou non, le widget peut être le widget par défaut.

La sensibilité des widgets

Un widget insensible est un widget qui ne répond pas aux appels. On peut le considérer comme inactif. Vous pouvez déclencher la sensibilité du widget en utilisant la fonction suivante :

L'argument ici est une valeur vraie ou fausse qui indique si le widget doit être sensible ou non. Quoi qu'il en soit, même si vous rendez un widget sensible, il sera insensible tant que ses parents le seront. Si vous souhaitez tester la sensibilité, vous pouvez utiliser :

Ces fonctions diffèrent en ce que la première teste seulement la valeur de sensibilité du widget alors que la seconde teste la valeur du widget, la valeur de ses parents et ainsi de suite. Seule la seconde peut vous dire si un widget est vraiment sensible ou non.

Position et taille des widgets

La plupart du temps, vous voudrez utiliser des conteneurs comme des boîtes et des tables pour régler la position et la taille des widgets mais il est possible de faire ces réglages à la main.

La fonction set_uposition() règle la position du widget à $x de la gauche et à $y pixels du haut. La fonction set_usize() la largeur du widget à $width pixels et la hauteur à $height .

Faites attention en utilisant ces fonctions parce qu'il est facile de choisir des valeurs qui pourraient être mauvaise pour certains utilisateurs. Par exemple, un utilisateur avec des problèmes de vue pourraient choisir une grosse police par défaut pour pouvoir lire et votre bouton de 60 pixels peut s'avérer trop petit pour afficher le texte. Vous devez aussi être conscient du type de caractères et de langues qui peuvent être utilisés par vos programmes. En règle générale, laisser les conteneurs comme les boites et les tables choisir les dimensions appropriées est la meilleure solution. Toutefois, certains widgets devraient avoir leurs dimensions réglées spécifiquement. Ces widgets devraient inclure les fenêtres, les arbres, les listes, les zones de dessin et autres...

Style du widget

Les fonctions suivantes seront détaillées dans le chapitre sur le style.

Couleur des widgets

Les fonctions suivantes pour la manipulation des couleurs seront vues plus tard dans le chapitre sur les couleurs.


next up previous contents
suivant: Signaux et Évènements monter: Tour d'horizon précédent: Goodbye World   Table des matières
LE BORGNE Patrice 2001-01-11