Python tkinter canvas внутри frame

Пытаюсь сделать гибкий фрейм со скроллом

Соответственно, помещаю внутрь него canvas и в canvas еще один фрейм

class ScrollArea(ttk.Frame):
    def __init__(self, master=None, orient=VERTICAL, *args, **kwargs):
        super(ScrollArea, self).__init__(master=master, *args, **kwargs)

        self.canvas = Canvas(self, *args, **kwargs)
        self.frame = Frame(self.canvas, *args, **kwargs)

        self.orient = orient
        if (orient == VERTICAL) | (orient == BOTH):
            self.scrollbarY = Scrollbar(self, orient=VERTICAL, command=self.canvas.yview)
            self.scrollbarY.pack(side=RIGHT, fill=Y)
            self.canvas.configure(yscrollcommand=self.scrollbarY.set)
        if (orient == HORIZONTAL) | (orient == BOTH):
            self.scrollbarX = Scrollbar(self, orient=HORIZONTAL, command=self.canvas.xview)
            self.scrollbarX.pack(side=BOTTOM, fill=X)
            self.canvas.configure(xscrollcommand=self.scrollbarX.set)

        self.canvas.pack()
        self.canvas.create_window((0, 0), window=self.frame, anchor='nw')
        self.frame.bind("<Configure>", self.c_config)

    def c_config(self, e):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

Мне нужно сделать так, чтоб если у родительского фрейма в параметрах был бы width или height, то он бы сжимался до них ВМЕСТЕ С CANVAS-ом

Однако в моем случае, если, например, width=30, canvas сжимается сильнее, видать ширину и высоту отсчитывает относительно чего-то

Пытался растянуть его с помощью параметров в методах pack (expand, fill) или place (relwidth, relheight) - либо расширяло как если бы делался просто pack, либо вообще в ноль сжимало соответственно

Как правильно пересчитывать эти параметры размеров для canvas, который внутри frame?

Или может есть еще способы?


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