⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Scrollbar
Tutoriel de tkinter.Scrollbar ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Scrollbar
Tutoriel de tkinter.Scrollbar ( )
DESCRIPTION.
Créer un nouveau controle de type ascenseur, ou barre de défilement des controles (widget : tkinter.Scrollbar ( )).
SYNTAXE.
BAR_Ascenseur = tkinter.Scrollbar ( parent , attribut1 = valeur , ... , attributn = valeur )
BAR_Ascenseur = ⇨ affectation de l'instance du controle [ optionnel ]
tkinter.Scrollbar ( ) ⇨ création d'une instance de tkinter.Scrollbar ( ) [ OBLIGATOIRE ]
parent ⇨ conteneur de l'instance de tkinter.Scale ( ) [ OBLIGATOIRE ]
attribut = valeur ⇨ attribut à modifier avec sa nouvelle valeur [ optionnel ]
REMARQUES.
Les objets créés avec la classe tkinter.Scrollbar ( ) permettent de faire défiler, déplacer, le contenu d'un autre controle qui lui est associé, pour modifier sa partie visible selon les besoins du programme ou de l'utilisateur. Seuls les controles ayant un attribut xscrollcommand et/ou yscrollcommand peuvent être associés aux barres de défilement. C'est donc le controle qui créer le lien entre les deux objet. Pour déplacer le contenu du controle associé, la barre de défilement doit appeler la fonction controle.xview ou la fonction controle.yview à l'aide de son attribut command.
Une barre de défilement peut controler les déplacements horizontaux ou verticaux du controle associé. Une barre de défilement ne peut être associé qu'à un seul controle, mais un controle peut être associé à une ou deux barres de défilement. Ue barre de défilement est constituée de deux flèches, une à chaque extrémité, et d'un curseur sur une glissière. La taille du curseur est propositionnelle au ration visible du contenu du controle associé, dans le sens de l'orientation de la barre de défilement. La position du curseur sur la glissière indique quelle partie du contenu est actuellement visible dans la fenêtre du controle.
Quelque soit sa réelle en pixels, les valeurs le long de la glissière vont de 0 à 1, où : 0.0 représente le début de la glissière et donc du contenu du controle associé ; 1.0 représente la fin de la glissière et donc du contenu du controle associé. L'occupation du curseur reçoit dont deux float ( ) pour ses extrémités compris entre 0.0 et 1.0.
Les objets permanents de type tkinter.Scrollbar ( ) sont identifiés dans le site par : BAR_.
Voir les conventions sur les variables utilisées dans ce site ...
UTILISATION DES BARRES DE DEFILEMENT
Lors de la création d'une barre de défilement, tkinter créé liaisons qui gèrent le comportement par défaut pour l'ascenseur.
Si l'utilisateur clique, avec le bouton par défaut de la souris, le gauche en général, sur l'une des flèches situées aux extrémités de la barre de défilement, le contenu du controle associé se déplace d'une unité dans le sens de la flèche. Si l'utilisateur laisse le bouton enfoncé, le déplacement, d'une unité, se répétera selon les valeurs des attributs repeatdelay et repeatinterval de la barre de défilement.
Si l'utilisateur clique, avec le bouton par défaut de la souris, le gauche en général, sur la glissière, mais en dehors du curseur, le contenu du controle associé se déplace d'une page, écran, fenêtre, dans le sens de la flèche opposée au curseur. Si l'utilisateur laisse le bouton enfoncé, le déplacement, d'une page, se répétera selon les valeurs des attributs repeatdelay et repeatinterval de la barre de défilement.
Si l'utilisateur clique, avec le bouton par défaut de la souris, le gauche en général, sur le curseur puis le déplace en maintenant le bouton enfoncé, le contenu du controle associé se déplace en corrélation avec le curseur, si attributs jump = False et sinon, si jump = True, le contenu fera un saut à la place indiqué par le curseur quand l'utilisateur relachera le bouton.
Si l'utilisateur clique, avec le bouton 2, le droit en général, sur la glissière, le contenu du controle associé fera un saut à l'emplacement correspondant au pointeur de la souris.
Si l'utilisateur clique, avec le bouton par défaut de la souris, le gauche en général, sur la glissière, ou sur l'une des flèches, en maintenant la touche Ctrl (controle) du clavier enfoncée, le début, la fin, la gauche ou la droite, selon l'endroit où se trouve le pointeur de la souris, du contenu sera positionné dans la partie visible du controle associé
Quand la barre de défilement ou le controle associé à la focus, si l'utilisateur pourra utiliser le clavier pour déplacer le contenu du controle associé. Mais les touches à utiliser diffèrent selon l'environnement et le système d'exploitation de l'utilisateur.
Dans tous les cas, le déplacement du contenu du controle associé force le déplacement du curseur le long de la glissière et vice-versa.
ASSOCIER DES BARRES DE DEFILEMENT A UN CONTROLE VALIDE.
Pour associer un controle à une barre de défilement, il faut affecter la méthode .set ( ) de la barre de défilement :
- l'attribut xscrollcommand du controle pour un déplacement horizontal de son contenu ;
- l'attribut yscrollcommand du controle pour un déplacement vertical de son contenu.
Pour déplacer le contenu du controle en fonction du curseur, l'attribut command de la barre de défilement doit invoquer :
- la méthode .xview ( ) du controle pour un déplacement horizontal de son contenu ;
- la méthode .yview ( ) du controle pour un déplacement vertical de son contenu ;
Les paires de parenthèses ne doivent pas être placées après le nom de la méthode dans le script. Une bonne pratique est de ne pas affeter les attribut xscrollcommand, yscrollcommand et command lors de la création des controles, mais de grouper leur utilisation dans une partie du script ultérieure.
Bien que cela ne soit pas obligatoire, il est préférable de modifier l'orientation de la barre de déplacement pour les déplacement horizontaux du contenu avec orient = "horizontal".
import tkinter
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BAR_Cote = tkinter.Scrollbar ( TKI_Principal )
BAR_Dessous = tkinter.Scrollbar ( TKI_Principal , orient = "horizontal" )
BOX_Test = tkinter.Listbox ( TKI_Principal , width = 10 )
for kligne in range ( 100 ) : BOX_Test.insert ( "end" , f"Ligne N° { str ( kligne ).zfill ( 3 ) } de la listbox test." )
BOX_Test [ "xscrollcommand" ] = BAR_Dessous.set
BOX_Test [ "yscrollcommand" ] = BAR_Cote.set
BAR_Cote [ "command" ] = BOX_Test.yview
BAR_Dessous [ "command" ] = BOX_Test.xview
BOX_Test.grid ( row = 0 , column = 0 )
BAR_Cote.grid ( row = 0 , column = 1 , sticky = "nesw" )
BAR_Dessous.grid ( row = 1 , column = 0 , sticky = "nesw" )
BUT_Quitter.grid ( row = 2 , column = 0 )
TKI_Principal.mainloop ( )
FONCTION D'APPEL D'UNE BARRE DE DEFILEMENT.
La fonction associée à l'attribut command d'une barre de défilement peut peut être autre que controle.xview ou controle.yview. Mais cette fonction reçoit, automatiquement, comme paramètre un tuple ( ) dont les éléments indiquent l'action de l'utilisateur. Si l'utilisateur a :
- cliqué sur la flèche diminuant la valeur de l'ascenseur, le tuple ( ) contient ( "scroll" , -1 , "units" ) ;
- cliqué sur la flèche augmentant la valeur de l'ascenseur, le tuple ( ) contient ( "scroll" , 1 , "units" ) ;
- cliqué sur la partie de la glissière précédent le curseur, le tuple ( ) contient ( "scroll" , -1 , "pages" ) ;
- cliqué sur la partie de la glissière suivant le curseur, le tuple ( ) contient ( "scroll" , 1 , "pages" ) ;
- déplacé le curseur, par cliquer-glisser, en diminuant la valeur de l'ascenseur, le tuple ( ) contient ( "moveto" , float ( ) ) ;
- déplacé le curseur, par cliquer-glisser, en augment la valeur de l'ascenseur, le tuple ( ) contient ( "moveto" , float ( ) ).
A Noter que, dans cette exemple si dessous, la liste fixe à choix BOX_Test ne réagit pas aux actions sur la barre de défilement BAR_Test. En effet, la fonction affecté à l'attribut command de la barre de défilement, peut être autre que controle.xview ou controle.yview. Le tuple ( ) transmis lors de l'appel de la fonction FNC_Test, peut alors être utile pour guider le comportement à adopter dans la suite du programme. Il faut, toutefois, bien penser à associer l’ascenseur à un controle pour définir le la taille du curseur et le pas d'incrémentation le long de la glissière.
import tkinter
def FNC_Test ( *Q ) :
LAB_Test [ "text" ] = Q
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BAR_Test = tkinter.Scrollbar ( TKI_Principal , command = FNC_Test )
BOX_Test = tkinter.Listbox ( TKI_Principal , yscrollcommand = BAR_Test.set )
LAB_Test = tkinter.Label ( TKI_Principal , text = "test" )
for kligne in range ( 25 ) : BOX_Test.insert ( "end" , kligne )
BOX_Test.grid ( row = 0 , column = 0 )
BAR_Test.grid ( row = 0 , column = 1 , sticky = "nesw" )
LAB_Test.grid ( row = 1 , column = 0 )
BUT_Quitter.grid ( row = 2 , column = 0 )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de