Есть несколько причин, по которым ваш кадр не расширяется, чтобы соответствовать холсту.У вас есть несколько проблем, которые нам нужно исправить в первую очередь.
self.frame=tk.Canvas(self.canvas,bg="black")
на самом деле не является фреймом.
onFrameConfigure
не являетсяделать что-либо, и это важная часть для изменения размера рамки.
self.frame.bind()
должно быть self.canvas.bind()
, поскольку мы используем даже то, что холст каким-то образом изменилсявызвать функцию изменения размера кадра.
self.canvas.create_window((0,0),anchor='n',window=self.frame)
нужен набор тегов для кадра, чтобы мы могли настроить его в функции позже.
См. Пример кода ниже и дайте мне знать, если у вас есть какие-либо вопросы.
import tkinter as tk
import time as t
class App(tk.Tk):
def __init__(self):
super().__init__()
self.canvas = tk.Canvas(self, bg="black")
self.frame = tk.Frame(self.canvas, bg="black")
self.scrollbar = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.title("label insert and scrollbar test")
self.geometry("900x400")
self.scrollbar.pack(side='right', fill='y')
self.canvas.pack(fill='x', expand=True)
self.frame.pack(fill='x', expand=True)
self.canvas.create_window((0, 0), anchor='n', window=self.frame, tags='my_frame')
self.canvas.bind("<Configure>", self.onFrameConfigure)
self.run()
def onFrameConfigure(self, event):
width = event.width
self.canvas.itemconfigure(my_frame, width=width)
self.canvas.config(scrollregion=self.canvas.bbox("all"))
def run(self):
ntime = t.asctime(t.gmtime())
n = tk.Label(self.frame, text=ntime, anchor="nw", justify='left')
n.config(bg="black", fg="white", font=("Courier", 12))
n.pack(fill='both', expand=True, padx=0)
self.after(800, self.run)
if __name__ == "__main__":
App().mainloop()
Обновление:
В приведенном ниже примере изменяются некоторые цвета фона и отступы, чтобы вы могли видеть, где именно находятся вещирасширение.
import tkinter as tk
import time as t
class App(tk.Tk):
def __init__(self):
super().__init__()
self.canvas = tk.Canvas(self, bg="black")
self.frame = tk.Frame(self.canvas, bg='darkblue',)
self.scrollbar = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.title("label insert and scrollbar test")
self.geometry("900x400")
self.scrollbar.pack(side='right', fill='y')
self.canvas.pack(fill='x', expand=True)
self.frame.pack(fill='both', expand=True)
self.canvas.create_window((0, 0), anchor='n', window=self.frame, tags='my_frame')
self.canvas.bind("<Configure>", self.on_canvas_configure)
self.run()
def on_canvas_configure(self, event):
self.canvas.itemconfigure("my_frame", width=event.width, height=event.height)
self.canvas.config(scrollregion=self.canvas.bbox("all"))
def run(self):
ntime = t.asctime(t.gmtime())
tk.Label(self.frame, bg='black', fg='white', text=ntime,
font=("Courier", 12)).pack(fill='both', expand=True , padx=5, pady=5)
self.canvas.config(scrollregion=self.canvas.bbox('all'))
self.after(800, self.run)
if __name__ == "__main__":
App().mainloop()
Пример результатов:
![enter image description here](https://i.stack.imgur.com/wmGr1.png)