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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow