tkinter
Widgets de desplazamiento
Buscar..
Introducción
Las barras de desplazamiento se pueden agregar a los widgets Listbox, Canvas y Text. Además, los widgets de entrada se pueden desplazar horizontalmente. Para poder desplazar otro tipo de widgets, debe colocarlos dentro de un lienzo o un widget de texto.
Sintaxis
- scrollbar = tk.Scrollbar (parent, ** kwargs)
Parámetros
Parámetro | Descripción |
---|---|
padre | Los widgets tkinter existen en una jerarquía. A excepción de la ventana raíz, todos los widgets tienen un padre. Algunos tutoriales en línea llaman a esto "maestro". Cuando el widget se agregue a la pantalla con paquete, lugar o cuadrícula, aparecerá dentro de este widget principal |
orientar | Orientación de la barra de desplazamiento, ya sea "vertical" (valor predeterminado) o "horizontal" |
Observaciones
Estos ejemplos asumen que tkinter se ha importado con import tkinter as tk
(python 3) o import Tkinter as tk
(python 2).
Conexión de una barra de desplazamiento vertical a un widget de texto
La conexión entre el widget y la barra de desplazamiento va en ambos sentidos. La barra de desplazamiento debe expandirse verticalmente para que tenga la misma altura que el 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)
Desplazando un widget de Canvas horizontal y verticalmente
El principio es esencialmente el mismo que para el widget de texto, pero se utiliza un diseño de Grid
para colocar las barras de desplazamiento alrededor del 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 diferencia del widget de texto, la región desplazable del lienzo no se actualiza automáticamente cuando se modifica su contenido, por lo que debemos definirla y actualizarla manualmente utilizando el argumento scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
devuelve las coordenadas del rectángulo que se ajustan a todo el contenido del lienzo.
Desplazando un grupo de widgets
Cuando una ventana contiene muchos widgets, es posible que no todos estén visibles. Sin embargo, ni una ventana (Tk o instancia Toplevel) ni un marco son desplazables. Una solución para hacer que el contenido de la ventana se pueda desplazar es colocar todos los widgets en un marco y luego incrustar este marco en un lienzo utilizando el método 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')