Не работает скроллбар , привязанный к холсту в питон

Мне нужно написать программу, которая создаёт таблицу из Entry, таблица должна быть большая и выходит за рамки экрана, поэтому я привязал к холсту скроллбар. Но когда таблица оказывается переполнена ,скроллбар не реагирует на это и не перематывает её.

*Ячейки добавляются не сразу при запуске программы, а после нажатия кнопки создать

from tkinter import*

window=Tk() 

window.title('Журнал')

canvas=Canvas(window,height=700, width=1300,bg='yellow')   #создаём холст

canvas.pack()

Len= open('Len.txt', 'r')
len=int(Len.read())

for i in range (0,len):
     global yStrFor
     yStrFor = 50
     AdresEntry.append(tkinter.Entry(canvas, width=40))  # добавляется начальный элемент в каждый столбец
     DataREntry.append(tkinter.Entry(canvas, width=10))
     FamiliaEntry.append(tkinter.Entry(canvas, width=20))
     ImyaEntry.append(tkinter.Entry(canvas, width=20))
     OtchestvoEntry.append(tkinter.Entry(canvas, width=20))
     RoditelEntry.append(tkinter.Entry(canvas, width=40))
     TelefonEntry.append(tkinter.Entry(canvas))
     VozrastEntry.append(tkinter.Entry(canvas, width=5))
     SertifikatEntry.append(tkinter.Entry(canvas, width=15))

     AdresEntry[i].place(x=630, y=yStrFor)
     DataREntry[i].place(x=500, y=yStrFor)
     FamiliaEntry[i].place(x=10, y=yStrFor)
     ImyaEntry[i].place(x=140, y=yStrFor)
     OtchestvoEntry[i].place(x=270, y=yStrFor)
     RoditelEntry[i].place(x=880, y=yStrFor)
     TelefonEntry[i].place(x=1150, y=yStrFor)
     VozrastEntry[i].place(x=585, y=yStrFor)
     SertifikatEntry[i].place(x=400, y=yStrFor)

     AdresEntry[i].insert(END,AdresStr[i])
     DataREntry[i].insert(END, DataRStr[i])
     FamiliaEntry[i].insert(END, FamiliaStr[i])
     ImyaEntry[i].insert(END, ImyaStr[i])
     OtchestvoEntry[i].insert(END, OtchestvoStr[i])
     RoditelEntry[i].insert(END, RoditelStr[i])
     TelefonEntry[i].insert(END, TelefonStr[i])
     VozrastEntry[i].insert(END, VozrastStr[i])
     SertifikatEntry[i].insert(END, SertifikatStr[i])

     yStrFor += 1

scroll=Scrollbar(window,command=canvas.yview) #добавляем скроллбар и привязываем к холсту

scroll.pack(side=RIGHT, fill=Y)

canvas.config(yscrollcommand=scroll.set)

window.mainloop()

Видимая область заполнена, и создано ещё несколько строк, но скроллбар не работает


Ответы (1 шт):

Автор решения: Fox Fox

Рабочий пример использования Canvas с полосами прокрутки:

import tkinter as tk

root = tk.Tk()
root.title("Canvas with Scrollbars")
root.geometry("800x400")

canvas_widget = tk.Canvas(root, bg="white", bd=2, highlightthickness=0)
canvas_widget.grid(row=0, column=0, padx=5, pady=5, sticky="nsew")

h_scrollbar = tk.Scrollbar(root, orient="horizontal", command=canvas_widget.xview)
h_scrollbar.grid(row=1, column=0, sticky="ew")
v_scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas_widget.yview)
v_scrollbar.grid(row=0, column=1, sticky="ns")

canvas_widget.configure(xscrollcommand=h_scrollbar.set, yscrollcommand=v_scrollbar.set)

# Добавление фигур на Canvas
canvas_widget.create_rectangle(50, 50, 450, 350, fill="red")  # Красный квадрат (400x300)
canvas_widget.create_oval(500, 50, 900, 350, fill="blue")     # Синий круг (400x300)
canvas_widget.create_polygon(50, 400, 450, 700, -150, 700, fill="green")  # Зелёный треугольник (400x300)

# Установка размеров области прокрутки
canvas_widget.config(scrollregion=canvas_widget.bbox("all"))

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

root.mainloop()
→ Ссылка