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?
Или может есть еще способы?