Tkinter. Как растянуть Form на весь Canvas?

У меня есть Canvas, мне нужно разместить в него Form, но при этом нужно, чтобы форма была растянута на всё возможное пространство.
import customtkinter as ctk

app = ctk.CTk()

# Canvas
canvas = ctk.CTkCanvas(app, bg="gray", highlightthickness=0)
canvas.pack(fill='both', expand=True, padx=10, pady=10)

# Form
main_frame = ctk.CTkFrame(canvas, bg_color='white')
canvas.create_window((20, 20), window=main_frame, anchor='nw')

# наполнение
for i in range(20):
    ctk.CTkButton(main_frame, text='Click Me').pack(pady=10)


Вот растянуть canvas на всю ширину я смог используя canvas.pack(fill='both', expand=True), но поскольку для размещения формы я не использую метод pack, а размещаю её внутри канваса, то у меня встал вопрос, как я могу растянуть её на всю доступную площадь, аналогично .pack(fill='both', expand=True) ?
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 1
rqdkmndh
@rqdkmndh
Web-разработчик
import customtkinter as ctk

app = ctk.CTk()

def resize_frame(event):
    # Растягиваем frame на всю площадь canvas
    canvas.itemconfig(frame_id, width=event.width-2*padx)

# Ширина и высота отступов
padx =20
pady = 20

# Canvas
canvas = ctk.CTkCanvas(app, bg="blue", highlightthickness=0)
canvas.pack(fill='both', expand=True, padx=padx, pady=pady)

# Функция привязки изменения размера Canvas
canvas.bind('<Configure>', resize_frame)

main_frame = ctk.CTkFrame(app, bg_color='white')
frame_id = canvas.create_window((20, 20), window=main_frame, anchor='nw')

scrollbar = ctk.CTkScrollbar(app, command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.place(relx=1, rely=0, relheight=1, anchor='ne')
# наполнение
for i in range(40):
    ctk.CTkButton(main_frame, text='Click Me').pack(pady=10)

canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox("all"))
app.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы