es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar la barra de desplazamiento en tkinter.

Estoy programando algo en Python y necesito crear una barra de desplazamiento que se actualice cuando se agreguen nuevos widgets a la ventana. No sé cómo hacer esto y no he encontrado la respuesta en ningún lugar. ¿Existe un comando para esto? Este es mi código actual.

“`python
import tkinter as tk

root = tk.Tk()
root.geometry("600×400")

my_canvas = tk.Canvas(root)
my_canvas.pack(side = "left", fill = "both", expand = 1)

my_scrollbar = tk.Scrollbar(root, orient = "vertical", command = my_canvas.yview)
my_scrollbar.pack(side = "right", fill = "y")
my_canvas.configure(yscrollcommand = my_scrollbar.set)
my_canvas.bind("<configure>", lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))

my_frame = tk.LabelFrame(my_canvas, width = my_canvas.winfo_width())
my_frame.grid_propagate(0)
my_frame.pack()

for i in range(10):
my_label = tk.Label(my_frame, text = "Label")
my_label.pack()

my_canvas.create_window((0, 0), width = 600, anchor = "nw", window = my_frame)

def create_label(scroll, canv, fram):
my_label = tk.Label(fram, text="Label")
my_label.pack()

my_button = tk.Button(my_frame, text = "Button", command = lambda: create_label(my_scrollbar, my_canvas, my_frame))
my_button.pack()

root.mainloop()
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar la barra de desplazamiento cuando se añaden nuevos widgets a la ventana, es necesario modificar la función lambda vinculada al evento "<configure>" del lienzo:

    my_canvas.bind("<configure>", lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all"), height=my_canvas.winfo_height()))
    

    Esto actualizará la altura del lienzo cada vez que se añadan nuevos widgets y la barra de desplazamiento se ajustará en consecuencia.

Comments are closed.