Tkinter размеры виджета

У меня есть окно и Canvas. Мне нужно, что бы Canvas был всегда меньше окна на 20 px. Как такое можно осуществить ?

import tkinter as tk
FORM = tk.Tk()
CANVAS = tk.Canvas()
CANVAS.place(relwidth =1, relheight = 1 - 20px) # просто пример того, что мне надо
FORM.mainloop()

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

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

Используйте pack с параметрами padx (отступ справа и слева), pady (отступ сверху и снизу):

import tkinter as tk
form = tk.Tk()
canvas = tk.Canvas(bg="white")
canvas.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
form.mainloop()

Скриншот

Если нужна панель с кнопками, то вообще не нужны отступы, нужен фрейм высотой 20 пикселей, вставляете ее ниже холста через pack или grid, добавляете в нее то, что вам нужно. Кнопки заменил на метки, т.к. кнопки сильно выше 20 пикселей, и расширяют фрейм под свою высоту.

import tkinter as tk

form = tk.Tk()
form.geometry("400x300")

# Для холста указал минимальные размеры, чтобы холст мог ужиматься неограниченно при изменении размер окна
canvas = tk.Canvas(bg="white", height=1, width=1)
canvas.pack(fill=tk.BOTH, expand=True)

toolbar = tk.Frame(form, height=20, background="black")
toolbar.pack(side=tk.LEFT, fill=tk.X, expand=True)
toolbar.pack_propagate(False)  # Запрещаем вложенным контролам менять размер фрейма

font = ("TkDefaultFont", 8)
tk.Button(toolbar, text="Кнопка 1", font=font).pack(side=tk.LEFT, padx=1)
tk.Button(toolbar, text="Кнопка 2", font=font).pack(side=tk.LEFT, padx=1)
tk.Button(toolbar, text="Кнопка 3", font=font).pack(side=tk.LEFT, padx=1)

form.mainloop()

Скриншот

→ Ссылка