Maîtriser le defilement avec Tkinter Canvas et Scrollbar

Le widget Scrollbar de Tkinter est un composant graphique qui permet de créer des barres de défilement verticales ou horizontales dans une interface utilisateur. Le widget Scrollbar lui-même n'affiche pas le contenu, il agit plutôt comme une interface de contrôle pour le défilement. Le widget Scrollbar de Tkinter propose différentes options et méthodes pour personnaliser son apparence et son comportement. Le widget Scrollbar est généralement utilisé en association avec d'autres widgets tels que Listbox, Text, Canvas, ou Text widget pour permettre le défilement du contenu. parent: est le widget parent dans lequel vous souhaitez placer le widget Scrollbar. Vous pouvez également spécifier différentes options pour personnaliser le widget Scrollbar. command : spécifie la méthode ou la fonction qui sera appelée lorsque la barre de défilement est déplacée.

Après avoir créé le widget Scrollbar, vous pouvez l'associer à un autre widget en utilisant la méthode appropriée du widget principal. Ensuite, nous configurons: la relation entre le Listbox et le Scrollbar. Nous utilisons la méthode config pour spécifier que le Listbox doit utiliser la méthode set du Scrollbar pour la commande de défilement (yscrollcommand). Lorsque vous exécutez ce code, une fenêtre s'ouvrira avec un Listbox affichant les langages de programmation et un Scrollbar sur le côté droit.

Un objet Scrollbar de Tkinter est doté de nombreuses méthodes qui permettent d'améliorer son apparence et ses fonctionalités. get(): Récupère la valeur actuelle du Scrollbar. set(*args): Définit la position du défilement. Ces méthodes vous permettent de contrôler le comportement du widget Scrollbar et d'interagir avec lui pour définir ou récupérer la position du défilement, activer des éléments spécifiques, etc.

Utilisation des Canvas et défilement

DESCRIPTION.Fait défiler verticalement la zone de dessin dans la zone de visibilité. SYNTAXE.CAN_Toile.yview_scroll ( facteur , bloc ). CAN_Toile ⇨ instance quelconque de tkinter.Canvas ( ) [ OBLIGATOIRE ]. yview_scroll ( ) ⇨ appel de la méthode [ OBLIGATOIRE ] facteur ⇨ nombre de blocs à déplacer [ OBLIGATOIRE ] bloc ⇨ nature des blocs à déplacer [ OBLIGATOIRE ]. Remarques: facteur est un int. Si facteur est positif, la zone de dessin défile vers le bas; négatif, elle défile vers le haut; 0, elle ne défile pas. bloc peut être "units" ou "pages".

On crée une surface canevas avec le constructeur Canvas (c’est une classe). On lui indique les dimensions du canevas avec les arguments width et height. On peut indiquer une couleur de fond avec bg. Les coordonnées repèrent des pixels. Pour être plus précis, le premier pixel est numéroté 0, le suivant 1, etc. Mais, parfois le comportement par défaut de ces options justifie qu’on les modifie. En vert, la bande d’activation du focus. Son épaisseur est highlightthickness. En ivoire, le bord du canevas, de couleur bg="ivory".

Les positions données lors de la construction d’objets tels que des rectangles, etc. sont toujours comprises au sens large. On peut dessiner des formes et images et, pour les images, convertir les fichiers vers un format propre à Tkinter avec la classe PhotoImage. Une fois l’image convertie, on peut l’incorporer dans un canevas en utilisant create_image. Le contenu du canevas supporte le placement d’images présentes sur une unité de stockage. Le format jpeg ne semble pas pris en charge, cf. avant de pouvoir utiliser une image, il faut la convertir dans un format propre à Tkinter.

Une fois les éléments dessinés sur le canevas, on peut sauvegarder le canevas avec la méthode postscript pour exporter vers EPS. On peut capturer les items comme des rectangles ou du texte et personnaliser leurs propriétés via fill et outline. Par défaut, un rectangle est délimité par des côtés noirs et une bordure d’un pixel d’épaisseur; pour supprimer la bordure, outline=''.

Pour comprendre les mécanismes de l’interaction entre canevas et défilement, il faut saisir que le Scrollregion peut influencer l’origine du repère. Comme scrollregion =(-200, -200, 200, 200), l’origine (0,0) est au centre de cette région. Ainsi, une barre de défilement permet de rendre accessible une zone a priori invisible, et la zone utile peut déborder de la zone de vue.

Gestion des objets sur le canevas

Chaque item placé sur un canevas Tkinter reçoit une id unique. Lors de la création, l’appel à cnv.create_rectangle ou cnv.create_image renvoie cette id. Les items plus récents peuvent être placés au-dessus des anciens, et la pile peut être manipulée via tag_raise et tag_lower. La fonction find_overlapping permet de détecter les collisions entre items.

La méthode move permet de déplacer des items selon un vecteur, et coords(item) renvoie les coordonnées actuelles de l’objet. Pour les items textuels, coords donne le centre; pour les rectangles ou ellipses, ce sont les extrémités d’une diagonale qui entourent l’item.

Pour supprimer des items, on peut utiliser Canvas.delete ou effacer temporairement via itemconfigure et son état. Il est possible de récupérer toutes les id des objets sur le canevas et de les manipuler ensuite. Le code montre comment supprimer aléatoirement des items ou comment tracer et gérer une scène interactive où les objets bougent et se superposent.

Pourquoi les barres de défilement et les frames défilants ?

Une barre de défilement permet de rendre accessible une zone a priori invisible et dont la zone utile peut dépasser la vue. Tkinter propose des solutions pour créer des cadres défilants (scrollable frames) en associant correctement les barres et les contenus. Dans Tkinter, only the Canvas widget is a natively scrollable container, ce qui signifie que vous pouvez définir une zone défilable plus grande que l’écran et déplacer la fenêtre de visualisation. Le cadre défilable peut contenir beaucoup de widgets et le scroll peut être horizontal ou vertical selon les besoins.

Pour implémenter une barre de défilement avec un Canvas et des autres widgets, on lie les commandes du Scrollbar (set et command) aux méthodes yview et yscrollcommand du Canvas ou des éléments internes. Les exemples montrent comment envelopper un Canvas dans des barres de défilement pour obtenir une interface fluide et réutilisable dans des projets réels.

Applications et cas d’usage

Les barres de défilement peuvent être utilisées dans des visualisations de données, des explorateurs de fichiers, des applications de chat, des visualiseurs de grandes quantités de données, et bien d’autres interfaces où le contenu est plus large que l’écran. En practice, vous pouvez créer des applications avec plusieurs widgets affichés à l’aide d’une barre de défilement, modifier l’apparence par défaut et faire défiler plusieurs Canvas simultanément pour une expérience utilisateur plus riche.

En pratique, en modifiant l’apparence et le comportement des barres de défilement, vous pouvez améliorer l’expérience utilisateur de votre application. Vous pouvez personnaliser le comportement de la barre de défilement pour améliorer l’interaction avec l’utilisateur. En exécutant ce code, vous verrez une barre de défilement personnalisée. Les barres de défilement peuvent être combinées avec d’autres widgets pour créer des interfaces plus complexes et fonctionnelles.

Ces concepts et exemples illustrent différentes façons d’utiliser les barres de défilement dans des applications réelles et démontrent comment Tkinter facilite l’intégration, la personnalisation et le défilement efficace du contenu.

Schéma des interactions Scrollbar et Canvas

Programmation Python #34 - widget canvas de tkinter

tags: #tkinter #canvas #defilement