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')


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow