tkinter
Scrollen widgets
Zoeken…
Invoering
Schuifbalken kunnen worden toegevoegd aan de widgets Listbox, Canvas en Tekst. Bovendien kunnen Entry-widgets horizontaal worden gescrolld. Om door andere typen widgets te kunnen bladeren, moet u ze in een Canvas- of een Tekstwidget plaatsen.
Syntaxis
- schuifbalk = tk.Scrollbar (ouder, ** kwargs)
parameters
Parameter | Beschrijving |
---|---|
ouder | tkinter-widgets bestaan in een hiërarchie. Behalve het root-venster hebben alle widgets een ouder. Sommige online tutorials noemen dit "master". Wanneer de widget met pakket, plaats of raster aan het scherm wordt toegevoegd, verschijnt deze in deze bovenliggende widget |
oriënteren | Oriëntatie van de schuifbalk, "vertical" (standaardwaarde) of "horizontal" |
Opmerkingen
Deze voorbeelden gaan ervan uit dat tkinter is geïmporteerd met import tkinter as tk
(python 3) of import Tkinter as tk
(python 2).
Een verticale schuifbalk verbinden met een tekstwidget
De verbinding tussen de widget en de schuifbalk gaat beide kanten op. De schuifbalk moet verticaal worden uitgebreid, zodat deze dezelfde hoogte heeft als de 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)
Horizontaal en verticaal door een Canvas-widget bladeren
Het principe is in wezen hetzelfde als voor de tekstwidget, maar een Grid
out wordt gebruikt om de schuifbalken rond de widget te plaatsen.
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)
In tegenstelling tot de tekstwidget, wordt het schuifbare gebied van het canvas niet automatisch bijgewerkt wanneer de inhoud ervan wordt gewijzigd, dus moeten we het definiëren en handmatig bijwerken met behulp van het argument scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
retourneert de coördinaten van de rechthoek die past bij de hele canvasinhoud.
Door een groep widgets bladeren
Wanneer een venster veel widgets bevat, zijn ze mogelijk niet allemaal zichtbaar. Noch een venster (Tk- of Toplevel-instantie) noch een frame zijn echter schuifbaar. Een oplossing om de vensterinhoud schuifbaar te maken, is om alle widgets in een frame te plaatsen en dit frame vervolgens in een canvas in te sluiten met de methode 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')