Le meilleur moyen de connaître les widgets est de lire l'aide
Tcl/Tk: pour chacun une foule d'options sont disponibles. Nous donnons
juste ici leur liste avec une brève description de leurs fonctionnalités
les plus usuelles.
Les fenêtres de Tk sont hiérarchisées. Ainsi un widget, lors de sa création, possède des ancêtres, chacun étant séparé par un point de son père: ancêtre1.ancêtre2....widget. Ainsi certains widget peuvent en contenir d'autres, comme les fenêtres (toplevel), ou les frames (frame). Les widgets text et canvas font aussi partie de cette catégorie mais ne permettent que de placer explicitement leurs widgets fils en donnant leur position absolue. Les toplevel et les frame, quant à elles, permettent de placer leurs fils de manière relative les uns par rapport aux autres par la technique du packing.
Lorsqu'une application Tcl/Tk démarre, une toplevel est automatiquement créée, c'est la toplevel ".". Elle est l'ancêtre de tous les widgets qui seront créés par l'application, et sa destruction engendre la fin de l'application.
On peut à loisir créer d'autres fenêtres par la
commande toplevel, en voici un exemple:
Après avoir créé une fenêtre toplevel,
la première chose à faire est de créer une frame à
l'intérieur de la fenêtre. Une frame est un widget
le plus souvent invisible servant à hiérarchiser les widgets
situés dans une fenêtre. Il peut cependant avoir une couleur,
un bord, etc...
|
Options les plus utilisées pour les frames |
|
| -background couleur | La couleur spécifiée est utilisée pour afficher la frame |
| -borderwidth épaisseur | La frame possède une épaisseur 3D de épaisseur pixels |
| -relief r | L'épaisseur 3D donne à la frame l'allure 3D
d'épaisseur donnée par l'option -borderwidth spécifiée
par r :
r = raised |
|
Commandes les plus utilisées sur les frames |
|
| cget option | Renvoie la valeur de l'option spécifiée de la frame |
| configure ?options? | Change les options spécifiées (voir plus haut) de la frame |
Voici comment nous créons la première frame de notre fenêtre:
Un widget est invisible
s'il n'est pas packé (ou placé, mais cette technique
est moins souple)
La commande permettant de packer un widget est de la forme :
pack configure widget ?options?
Les options les plus couramment utilisées sont données
dans le tableau ci-dessous:
|
Option de la commande pack configure |
|
| -after autrewidget | Par défaut la commande pack configure donne la priorité aux widgets dans l'ordre d'arrivée. Ainsi si deux widgets demandent à être en haut d'une frame, le premier à le demander sera au-dessus de l'autre. Cette option permet d'insérer un widget dans l'ordre d'arrivée. |
| -before autrewidget | Similaire à l'option -after, sauf qu'il place le widget juste avant le widget autrewidget. |
| -expand 0_ou_1 | Si -expand est mis à vrai (1), le widget consommera tout l'espace possible (partagé équitablement avec les autres widgets ayant été packés avec la même option. |
| -fill style | Dans le cas où l'espace obtenu est plus grand que la taille demandée par le widget, celui-ci sera agrandi pour remplir l'espace horizontalement (style = x), verticalement (style = y) ou bien complètement (style = both). |
| -ipadx pixels | Spécifie un bord de largeur pixels à rajouter à gauche et à droite à l'intérieur du widget en plus de sa taille demandée. |
| -ipady pixels | Spécifie un bord de hauteur pixels à rajouter en haut et en bas à l'intérieur du widget en plus de sa taille demandée. |
| -padx pixels | Spécifie un bord de largeur pixels à rajouter à gauche et à droite à l'extérieur du widget en plus de sa taille demandée. |
| -pady pixels | Spécifie un bord de hauteur pixels à rajouter en haut et en bas à l'extérieur du widget en plus de sa taille demandée. |
| -side côté | C'est l'option principale de cette commande, puisque la valeur de côté (top, bottom, left, right) dit ou placer le widget dans son père. |
On peut masquer un widget par la commande pack forget nom_widget. Ainsi le widget n'est plus affiché jusqu'à ce qu'il soit de nouveau packé.
Maintenant créons deux éléments dans la fenêtre
.top1: un bouton, en bas, et un message qui devra prendre le plus
de place possible à l'intérieur de la fenêtre. On peut
le faire ainsi:
En étudiant la commande pack configure, et notamment
son option -side, il est clair que les widgets peuvent
être facilement packés les uns par rapport aux autres
soit horizontalement (valeurs left et right
pour -side), soit verticalement (valeurs top
et bottom pour -side). Packer trois
widgets en en mettant un en haut à gauche, l'autre en haut
à droite, et le dernier en dessous des deux autres n'est pas naturel
si ces trois widgets sont dans la même frame. La solution
est de hiérarchiser la frame en une sous frame, qui contiendra les
deux widgets du haut packés horizontalement, et le troisième
widget qui sera frère de la sous frame créée,
et qui sera packé verticalement par rapport à celle-ci.
|
|
|
|