tkinter
Przewijane widżety
Szukaj…
Wprowadzenie
Paski przewijania można dodawać do widżetów Listbox, Canvas i Text. Ponadto widżety wejścia można przewijać w poziomie. Aby móc przewijać inne typy widżetów, musisz umieścić je w widgecie Canvas lub Text.
Składnia
- pasek przewijania = tk. pasek przewijania (nadrzędny, ** kwargs)
Parametry
Parametr | Opis |
---|---|
rodzic | Widżety tkinter istnieją w hierarchii. Z wyjątkiem okna głównego wszystkie widżety mają element nadrzędny. Niektóre samouczki online nazywają to „mistrzem”. Gdy widżet zostanie dodany do ekranu z paczką, miejscem lub siatką, pojawi się w tym widżecie nadrzędnym |
Orient | Orientacja paska przewijania, "vertical" (wartość domyślna) lub "horizontal" |
Uwagi
W tych przykładach założono, że tkinter został zaimportowany za pomocą import tkinter as tk
(python 3) lub import Tkinter as tk
(python 2).
Podłączanie pionowego paska przewijania do widżetu Tekst
Połączenie między widżetem a paskiem przewijania przebiega w obie strony. Pasek przewijania należy rozwinąć w pionie, aby miał tę samą wysokość co widżet.
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)
Przewijanie widgetu Canvas w poziomie i w pionie
Zasada jest zasadniczo taka sama jak dla widżetu Tekst, ale układ Grid
służy do umieszczania pasków przewijania wokół widżetu.
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)
W przeciwieństwie do widżetu Tekst przewijalny obszar obszaru roboczego nie jest aktualizowany automatycznie po zmodyfikowaniu jego zawartości, dlatego musimy go zdefiniować i zaktualizować ręcznie za pomocą argumentu scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
zwraca współrzędne prostokąta pasujące do całej zawartości canvas.
Przewijanie grupy widżetów
Gdy okno zawiera wiele widżetów, nie wszystkie mogą być widoczne. Jednak ani okno (instancja Tk lub Toplevel), ani ramka nie są przewijane. Jednym z rozwiązań umożliwiających przewijanie zawartości okna jest umieszczenie wszystkich widżetów w ramce, a następnie osadzenie tej ramki w create_window
przy użyciu metody 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')