tkinter
Rulla widgetar
Sök…
Introduktion
Rullfält kan läggas till Listbox-, Canvas- och Text-widgetar. Dessutom kan ingångswidgets rullas horisontellt. För att kunna bläddra i andra typer av widgetar måste du lägga dem in i en Canvas eller en Text-widget.
Syntax
- rullningsfält = tk.Scrollbar (förälder, ** kwargs)
parametrar
Parameter | Beskrivning |
---|---|
förälder | tkinter-widgetar finns i en hierarki. Förutom rotfönstret har alla widgetar en förälder. Vissa onlinestudier kallar den här "master". När widgeten läggs till på skärmen med paket, plats eller rutnät visas den i denna överordnade widget |
orient | Riktningens riktning, antingen "vertical" (standardvärde) eller "horizontal" |
Anmärkningar
Dessa exempel antar att tkinter har importerats med antingen import tkinter as tk
(python 3) eller import Tkinter as tk
(python 2).
Ansluta en vertikal rullningslista till en textwidget
Anslutningen mellan widgeten och bläddringsfältet går båda vägarna. Rullningsfältet måste utökas vertikalt så att det har samma höjd som widgeten.
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)
Rulla en Canvas-widget horisontellt och vertikalt
Principen är i stort sett densamma som för textwidgeten, men en Grid
används för att placera rullningslisterna runt widgeten.
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)
Till skillnad från för textwidgeten uppdateras inte den rullningsbara regionen på Canvas automatiskt när dess innehåll ändras, så vi måste definiera den och uppdatera den manuellt med hjälp av scrollregion
argumentet:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
returnerar koordinaterna för rektangeln som passar hela dukinnehållet.
Bläddra i en grupp widgets
När ett fönster innehåller många widgets är de kanske inte alla synliga. Varken ett fönster (Tk eller Toplevel-instans) eller en ram kan dock rullas. En lösning för att göra fönsterinnehållet rullbart är att placera alla widgetar i en ram och sedan bädda in denna ram i en duk med metoden 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')