Двигаются все изображения в Canvas Tkinter

У меня есть задача написать код, и в коде я добавил на canvas основную картинку фона программы и нужное меню для неё, но проблема в том, что когда я захотел сделать так чтобы при увеличении/уменьшении окна меню для программы на это бы реагировало, но у меня выходит так, что у меня одновременно с этим двигается фон и само меню. Суть вопроса - как сделать так чтобы двигалось только меню, а не фон с ним?

import customtkinter as ctk
import tkinter as tk
from PIL import Image, ImageTk
import os
from screeninfo import get_monitors

ctk.set_appearance_mode("system")
ctk.set_default_color_theme("blue")

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.monitor = get_monitors()[0]
        self.screen_width = self.monitor.width
        self.screen_height = self.monitor.height
        
        self.title("Guard Virus")
        self.geometry("700x650")
        self.minsize(500, 500)
        self.maxsize(self.screen_width, self.screen_height)
        
        frame_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "build", "images", "builder_images", "base", "frame.png")
        
        self.canvas = tk.Canvas(self, width=self.screen_width, height=self.screen_height)
        self.canvas.pack(fill="both", expand=True)

        self.image_frame = Image.open(frame_path)
        self.resize_frame_image = self.image_frame.resize((self.screen_width, self.screen_height), Image.LANCZOS)
        self.load_image_frame = ImageTk.PhotoImage(self.resize_frame_image)
        
        self.canvas.create_image(0, 0, anchor="nw", image=self.load_image_frame)
        
        self.properties_frame_and_buttons()
        
        
    def properties_frame_and_buttons(self):
        properties_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "build", "images", "builder_images", "base", "properties.png")
        
        self.image_properties = Image.open(properties_path)
        self.resize_properties_image = self.image_properties.resize((200, 150), Image.LANCZOS)
        self.load_image_properties = ImageTk.PhotoImage(self.image_properties)
        
        self.canvas.create_image(200, 0, anchor="nw", image=self.load_image_properties)
        self.canvas.place(relwidth=1.5, relheight=1, relx=0.3, rely=0.3)

        
if __name__ == "__main__":
    app = App()
    app.mainloop()

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

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

В рамках этой стилистики постановки вопроса я с трудом понял, что нужно (может и не понял). Инсталлировать customtkinter как-то не очень хочется (у меня своя работа в Питоне). Итак, есть форма. В ней Canvas, в нём изображение, а поверх этого какие-то объекты по центру (например). Надо чтоб эти объекты (например, кнопка) двигались при растяжении формы, а изображение оставалось на месте. Вот простенький алгоритм-идея:

import tkinter as tk

root = tk.Tk()
root.geometry("400x400")  # Устанавливаем размеры формы

# Создаем канвас и добавляем его в ячейку сетки
canvas = tk.Canvas(root, width=400, height=400, bg='white')
canvas.grid(row=0, column=0, sticky='nw')

# Добавляем изображение на канвас
image = tk.PhotoImage(file='image.png')
canvas.create_image(0, 0, anchor='nw', image=image)

# Создаем кнопку и размещаем её в центре ячейки
button = tk.Button(root, text="Нажми меня")
button.grid(row=0, column=0)

# Обработка изменения размеров формы
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

root.mainloop()

Почему у меня работает вот такое центрирование? Есть некоторая догадка. Если не указывать для кнопки параметр sticky вообще (в Tkinter) или указать вот такое: sticky="", она начинает автоматически центрироваться в ячейке и перемещаться при изменении размеров.

→ Ссылка