tkinter
Widgets de défilement
Recherche…
Introduction
Des barres de défilement peuvent être ajoutées aux widgets Listbox, Canvas et Text. De plus, les widgets d'entrée peuvent être défilés horizontalement. Pour pouvoir faire défiler d'autres types de widgets, vous devez les placer dans un widget Canvas ou Text.
Syntaxe
- scrollbar = tk.Scrollbar (parent, ** kwargs)
Paramètres
Paramètre | La description |
---|---|
parent | Les widgets tkinter existent dans une hiérarchie. À l'exception de la fenêtre racine, tous les widgets ont un parent. Certains didacticiels en ligne appellent ce "maître". Lorsque le widget est ajouté à l'écran avec le pack, le lieu ou la grille, il apparaîtra dans ce widget parent |
Orient | Orientation de la barre de défilement, soit "vertical" (valeur par défaut) ou "horizontal" |
Remarques
Ces exemples supposent que tkinter a été importé avec import tkinter as tk
(python 3) ou import Tkinter as tk
(python 2).
Connexion d'une barre de défilement verticale à un widget texte
La connexion entre le widget et la barre de défilement va dans les deux sens. La barre de défilement doit être agrandie verticalement pour avoir la même hauteur que le widget.
text = tk.Text(parent)
text.pack(side="left")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=text.yview)
scroll_y.pack(side="left", expand=True, fill="y")
text.configure(yscrollcommand=scroll_y.set)
Faire défiler un widget Canvas horizontalement et verticalement
Le principe est essentiellement le même que pour le widget Texte, mais une disposition Grid
est utilisée pour placer les barres de défilement autour du widget.
canvas = tk.Canvas(parent, width=150, height=150)
canvas.create_oval(10, 10, 20, 20, fill="red")
canvas.create_oval(200, 200, 220, 220, fill="blue")
canvas.grid(row=0, column=0)
scroll_x = tk.Scrollbar(parent, orient="horizontal", command=canvas.xview)
scroll_x.grid(row=1, column=0, sticky="ew")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
scroll_y.grid(row=0, column=1, sticky="ns")
canvas.configure(yscrollcommand=scroll_y.set, xscrollcommand=scroll_x.set)
Contrairement au widget Texte, la zone déroulante du canevas n'est pas automatiquement mise à jour lorsque son contenu est modifié. Nous devons donc le définir et le mettre à jour manuellement à l'aide de l'argument scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
renvoie les coordonnées du rectangle correspondant à tout le contenu de la toile.
Faire défiler un groupe de widgets
Lorsqu'une fenêtre contient de nombreux widgets, ils ne sont peut-être pas tous visibles. Cependant, ni une fenêtre (instance Tk ou Toplevel) ni une image ne peuvent être défilées. Une solution pour faire défiler le contenu de la fenêtre consiste à placer tous les widgets dans un cadre, puis à intégrer cette image dans un canevas à l'aide de la méthode create_window
.
canvas = tk.Canvas(parent)
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
frame = tk.Frame(canvas)
# group of widgets
for i in range(20):
tk.Label(frame, text='label %i' % i).pack()
# put the frame in the canvas
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scrollregion
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'),
yscrollcommand=scroll_y.set)
canvas.pack(fill='both', expand=True, side='left')
scroll_y.pack(fill='y', side='right')