tkinter
Scrollende Widgets
Suche…
Einführung
Bildlaufleisten können zu Widgets "Listbox", "Canvas" und "Text" hinzugefügt werden. Außerdem können Entry-Widgets horizontal gescrollt werden. Um andere Arten von Widgets scrollen zu können, müssen Sie sie in einen Canvas- oder Text-Widget einfügen.
Syntax
- scrollbar = tk.Scrollbar (übergeordnetes Element, ** Warnungen)
Parameter
Parameter | Beschreibung |
---|---|
Elternteil | tkinter-Widgets sind in einer Hierarchie vorhanden. Mit Ausnahme des Stammfensters haben alle Widgets ein übergeordnetes Element. Einige Online-Tutorials nennen dies "Master". Wenn das Widget mit pack, place oder grid zum Bildschirm hinzugefügt wird, wird es in diesem übergeordneten Widget angezeigt |
Orient | Ausrichtung der Bildlaufleiste, entweder "vertical" (Standardwert) oder "horizontal" |
Bemerkungen
In diesen Beispielen wird davon ausgegangen, dass tkinter entweder mit import tkinter as tk
(Python 3) oder import Tkinter as tk
(Python 2) import Tkinter as tk
.
Verbinden einer vertikalen Bildlaufleiste mit einem Text-Widget
Die Verbindung zwischen dem Widget und der Bildlaufleiste geht in beide Richtungen. Die Bildlaufleiste muss vertikal erweitert werden, sodass sie dieselbe Höhe wie das Widget hat.
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)
Ein Canvas-Widget horizontal und vertikal scrollen
Das Prinzip ist im Wesentlichen dasselbe wie für das Text-Widget, jedoch wird ein Grid
verwendet, um die Bildlaufleisten um das Widget herum zu platzieren.
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)
Im Gegensatz zum Text-Widget wird der scrollbare Bereich der Zeichenfläche nicht automatisch aktualisiert, wenn der Inhalt geändert wird. scrollregion
müssen Sie ihn definieren und mithilfe des Arguments scrollregion
manuell scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
gibt die Koordinaten des Rechtecks zurück, die dem gesamten Inhalt der Leinwand entsprechen.
Blättern einer Gruppe von Widgets
Wenn ein Fenster viele Widgets enthält, sind diese möglicherweise nicht alle sichtbar. Weder ein Fenster (Tk- oder Toplevel-Instanz) noch ein Frame sind scrollbar. Eine Lösung, um den Fensterinhalt scrollbar zu machen, besteht darin, alle Widgets in einen Frame zu setzen und diesen Frame dann mit der create_window
Methode in einen Canvas 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')