Я не уверен, почему это не сработает.Я, должно быть, что-то упускаю, потому что я могу сделать одну рамку развернутой, чтобы соответствовать холсту, но я не могу сделать рамку внутри рамки развернутой, чтобы соответствовать холсту.
Я боролся с этим часами, и я чувствую, чтоэто что-то очевидное.
Я ожидаю, что метка внутри NoteFrame
развернется, чтобы заполнить фрейм, и расширение NoteFrame, чтобы заполнить холст.
Вот минимальный код для воспроизведениякод поведения:
import tkinter as tk
class NoteFrame(tk.Frame):
def __init__(self, container):
super().__init__(container)
self.config(background='white')
for i in range(20):
tk.Label(self, text='test').grid(row=i, column=0, sticky='nsew')
class GCMain(tk.Tk):
def __init__(self):
super().__init__()
self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1)
self.main_canvas = tk.Canvas(self, background="bisque")
self.main_canvas.columnconfigure(0, weight=1)
self.main_canvas.rowconfigure(0, weight=1)
self.frame_n_canvas = tk.Frame(self.main_canvas)
self.frame_n_canvas.grid(row=0, column=0, sticky='nsew') # tried with and without this
self.frame_n_canvas.columnconfigure(0, weight=1)
self.main_canvas.config(scrollregion=self.main_canvas.bbox("all"), highlightthickness=0)
scrollbar = tk.Scrollbar(self, orient='vertical')
scrollbar.grid(row=0, column=1, sticky='nsw')
scrollbar.config(command=self.main_canvas.yview)
self.main_canvas.config(yscrollcommand=scrollbar.set)
self.main_canvas.grid(row=0, column=0, sticky='nsew')
self.main_canvas.create_window(0, 0, window=self.frame_n_canvas, anchor='nw')
self.main_canvas.bind("<Configure>", self.update_scrollregion)
nf = NoteFrame(self.frame_n_canvas)
nf.grid(row=0, column=0, sticky='nsew') # tried with and without this
def on_resize(self, event):
w, h = event.width, event.height
self.main_canvas.configure(width=w, height=h)
self.frame_n_canvas(width=w, height=h) # tried with and without this
def update_scrollregion(self, event):
self.main_canvas.configure(scrollregion=self.main_canvas.bbox("all"))
if __name__ == '__main__':
GCMain().mainloop()