Как сделать чтоб при изменении размера окна tkinter интерфейс сдвигался вместе с границей

Столкнулся с проблемой что если сделать окно tkinter и в нем сделать интерфейс с кнопками, текстом, entry и тому подобное, то при изменении размера окна кнопки не будут сдвигаться, например:введите сюда описание изображения

введите сюда описание изображения

на этих скриншотах видно что при увиличении окна кнопки и текст меняют свое положение, и кнопка например зашла на флажки, надо сделать так чтоб при увиличении окна кординаты интерфейса менялись


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

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

Вы кажись вы используйте метод .pack(). У него довольно неоднозначное размещение виджетов. Или вы комбинируете несколько методов.

Что бы ничего не сдвигалось, пользуйтесь .grid() или .place() без -rel(x/y/width/height) параметров.

Про них можно посмотреть на:

https://younglinux.info/tkinter/grid

https://younglinux.info/tkinter/place

Можно вообще сделать так чтобы окошко не раздвигалось и сдвигалось, с помощью метода window.resizable(False, False)

→ Ссылка
Автор решения: insolor

Пример реализации через grid. Суть в том, чтобы через параметр weight задать, чтобы нужные колонки/строки автоматически расширялись при увеличении размера окна. Например, для последней строки задаем weight=1, прилипание кнопки к левой нижней границе ячейки - получается кнопка закрепленная в левом нижнем углу окна.

import tkinter as tk

root = tk.Tk()

root.minsize(200, 210)

root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)

tk.Label(text="Например").grid(row=0, column=0, columnspan=2)
tk.Label(text="Например").grid(row=1, column=0, columnspan=2)
tk.Label(text="Например").grid(row=2, column=1)

check_frame = tk.Frame()
check_frame.grid(row=3, column=0, sticky="W")

tk.Checkbutton(check_frame, text="Например 1").pack()
tk.Checkbutton(check_frame, text="Например 2").pack()
tk.Checkbutton(check_frame, text="Например 3").pack()
tk.Checkbutton(check_frame, text="Например 4").pack()
tk.Checkbutton(check_frame, text="Например 5").pack()

tk.Button(text="Например").grid(row=4, column=0, sticky="SW")
root.rowconfigure(4, weight=1)

root.mainloop()

Окно в минимальном размере (заданном с помощью метода minsize): Скрин 1

Расширенное окно: Скрин 2

→ Ссылка