Не работает скроллбар , привязанный к холсту в питон
Мне нужно написать программу, которая создаёт таблицу из 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()