Barra de desplazamiento vertical para el marco en Tkinter, Python

Mi objective es tener una barra de desplazamiento que se encuentre en el lado derecho de una ventana de pantalla completa, lo que permite al usuario desplazarse hacia arriba y hacia abajo a través de varios widgets diferentes (como tags y botones). Por otras respuestas que he visto en este sitio, he llegado a la conclusión de que se debe asignar una barra de desplazamiento a un canvas para que funcione correctamente, lo que he tratado de incluir en mi código pero no he tenido mucho. el éxito con.

El siguiente código muestra una versión simplificada de lo que he logrado lograr hasta ahora:

from tkinter import * root = Tk() root.state("zoomed") root.title("Vertical Scrollbar") frame = Frame(root) canvas = Canvas(frame) Label(canvas, text = "Test text 1\nTest text 2\nTest text 3\nTest text 4\nTest text 5\nTest text 6\nTest text 7\nTest text 8\nTest text 9", font = "-size 100").pack() scrollbar = Scrollbar(frame) scrollbar.pack(side = RIGHT, fill = Y) canvas.configure(yscrollcommand = scrollbar.set) canvas.pack() frame.pack() root.mainloop() 

Me enfrento a dos problemas al ejecutar este código:

Una es que la barra de desplazamiento está inactiva y no permite que el usuario se desplace hacia abajo para ver el rest del texto.

La otra es que la barra de desplazamiento está unida al lado derecho del texto, en lugar del lado derecho de la ventana.

Hasta ahora, ninguna de las otras respuestas que he encontrado en este sitio me ha permitido modificar mi código para que sea compatible con una barra de desplazamiento totalmente funcional para mi progtwig. Estaría muy agradecido por cualquier ayuda que alguien que lea esto pueda proporcionar.

Ver nuevamente el enlace: https://stackoverflow.com/a/3092341/7432

Muestra cómo crear un marco desplazado, y luego puede agregar todos los widgets en este marco.

 import tkinter as tk def on_configure(event): # update scrollregion after starting 'mainloop' # when all widgets are in canvas canvas.configure(scrollregion=canvas.bbox('all')) root = tk.Tk() # --- create canvas with scrollbar --- canvas = tk.Canvas(root) canvas.pack(side=tk.LEFT) scrollbar = tk.Scrollbar(root, command=canvas.yview) scrollbar.pack(side=tk.LEFT, fill='y') canvas.configure(yscrollcommand = scrollbar.set) # update scrollregion after starting 'mainloop' # when all widgets are in canvas canvas.bind('', on_configure) # --- put frame in canvas --- frame = tk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor='nw') # --- add widgets in frame --- l = tk.Label(frame, text="Hello", font="-size 50") l.pack() l = tk.Label(frame, text="World", font="-size 50") l.pack() l = tk.Label(frame, text="Test text 1\nTest text 2\nTest text 3\nTest text 4\nTest text 5\nTest text 6\nTest text 7\nTest text 8\nTest text 9", font="-size 20") l.pack() # --- start program --- root.mainloop()