tkinter
Widget a scorrimento
Ricerca…
introduzione
Le barre di scorrimento possono essere aggiunte ai widget Listbox, Canvas e Text. Inoltre, i widget Entry possono essere scrollati orizzontalmente. Per poter scorrere altri tipi di widget, è necessario inserirli in un oggetto Canvas o in un widget Testo.
Sintassi
- scrollbar = tk.Scrollbar (parent, ** kwargs)
Parametri
Parametro | Descrizione |
---|---|
genitore | i widget tkinter esistono in una gerarchia. Ad eccezione della finestra radice, tutti i widget hanno un genitore. Alcuni tutorial online chiamano questo "master". Quando il widget viene aggiunto allo schermo con pack, luogo o griglia, apparirà all'interno di questo widget genitore |
Oriente | Orientamento della barra di scorrimento, "vertical" (valore predefinito) o "horizontal" |
Osservazioni
Questi esempi presuppongono che tkinter sia stato importato con import tkinter as tk
(python 3) o import Tkinter as tk
(python 2).
Collegamento di una barra di scorrimento verticale a un widget di testo
La connessione tra il widget e la barra di scorrimento va in entrambe le direzioni. La barra di scorrimento deve essere espansa verticalmente in modo che abbia la stessa altezza del 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)
Scorrimento di un widget Canvas in senso orizzontale e verticale
Il principio è essenzialmente lo stesso del widget Testo, ma un layout Grid
viene utilizzato per posizionare le barre di scorrimento attorno al widget.
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)
A differenza del widget Testo, la regione scrollabile della Tela non viene aggiornata automaticamente quando il suo contenuto viene modificato, quindi dobbiamo definirlo e aggiornarlo manualmente usando l'argomento scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
restituisce le coordinate del rettangolo adattando l'intero contenuto del canvas.
Scorrimento di un gruppo di widget
Quando una finestra contiene molti widget, potrebbero non essere tutti visibili. Tuttavia, né una finestra (istanza Tk o Toplevel) né una cornice sono scorrevoli. Una soluzione per rendere scorrevole il contenuto della finestra consiste nel mettere tutti i widget in una cornice e quindi incorporare questa cornice in una tela utilizzando il metodo 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')