Chapitre 8. Les widgets d'intervalle
La catégorie des widgets d'intervalle (gtk.Range) inclut l'incontournable
barre de défilement ainsi que le "gradateur", un peu moins courant. Bien
que l'on utilise généralement ces deux types d'objets à différentes
fins, ils sont assez similaires dans leur implémentation et leur fonctionnement. Les
widgets d'intervalle ont un jeu d'éléments graphiques commun : la coulisse et
le curseur, qui possèdent tous les deux leur propre fenêtre X et qui
reçoivent des évènements. Pour faire avancer ou reculer le curseur dans
la coulisse on peut le tirer avec la souris ou bien cliquer directement dans la coulisse.
Dans ce second cas, et selon le bouton de la souris utilisé, le curseur viendra se
positionner à l'endroit du clic ou s'en rapprochera suivant un pas
préféfini.
Comme nous venons de le voir dans le chapitre sur les ajustements, tous les widgets d'intervalle sont
associés à un gtk.Adjustment, à partir duquel ils calculent
la longueur du curseur et sa position dans la coulisse. Lorsque l'utilisateur manipule
le curseur, le widget d'intervalle modifie la valeur de l'ajustement.
8.1. HScrollbar
et VScrollbar : Les barres de défilement
Voici les très classiques barres de défilement. Elles ne devraient
être employées que pour faire défiler un autre widget, comme une
liste, une zone de texte ou une vue orientable (il est même bien plus pratique
d'utiliser une fenêtre à défilement dans la plupart des cas). Pour
le reste, les gradateurs seront plus appropriés, car plus simples d'utilisation
et offrant plus de fonctionnalités.
Les barres de défilement horizontale et verticale sont implémentées
dans deux types différents. Il n'y a pas grand-chose à dire à leur
sujet. On les crée en appelant l'une de ces méthodes :
barredefil_h = gtk.HScrollbar(adjustment=None)
barredefil_v = gtk.VScrollbar(adjustment=None)
... et voilà tout. L'argument adjustment (ajustement) attend
une référence à un
ajustement existant. Si vous ne lui en fournissez pas,
la méthode en créera un pour vous, ce qui peut être
intéressant si vous voulez transmettre ce nouvel ajustement à
la méthode constructeur d'un autre widget, qui se chargera de le configurer
pour vous (une zone de texte, par exemple).