<h2>检查我的答案:</h2>
<p><strong>对于<code>canvas</code>上的<code>scroll widget</code>,请按照以下步骤操作:</strong></p>
<ol>
<li>创建第1帧,这将保存画布和滚动条</li>
<li>创建将在画布上滚动的第2帧,您可以在此帧上网格化任何小部件
但您需要使用<code>canvas.create_window</code>创建窗口</李>
</ol>
<h2>你们可以在评论中讨论额外的问题</h2>
<pre><code>import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('800x400+0+0')
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.rowconfigure(0, weight=1)
########################################################################
######## Left Side ####################################################
left_container = tk.Frame(root, bg='green')
left_container.grid(row=0, column=0, sticky='nsew', padx=(0, 2))
left_container.columnconfigure(0, weight=1)
left_container.rowconfigure(0, weight=1)
left_canvas = tk.Canvas(left_container, bg='orange')
left_canvas.grid(row=0, column=0, sticky='nsew')
left_scrollbar = tk.Scrollbar(left_container, orient='vertical', command=left_canvas.yview)
left_scrollbar.grid(row=0, column=1, sticky='nsew')
left_canvas['yscrollcommand'] = left_scrollbar.set
left_canvas.columnconfigure(0, weight=1)
left_canvas.rowconfigure(0, weight=1)
left_final_window = tk.Frame(left_canvas, bg='green')
left_canvas.create_window((0, 0), window=left_final_window, anchor='nw', tags='expand1')
left_final_window.columnconfigure(0, weight=1)
for i in range(1, 51):
label = tk.Label(left_final_window, text=f'Manish Pushpam ({i})')
label.grid(row=i-1, column=0, sticky='nsew', pady=(0, 2))
left_canvas.bind('<Configure>', lambda event: left_canvas.itemconfigure('expand1', width=event.width))
left_final_window.update_idletasks()
left_canvas.config(scrollregion=left_canvas.bbox('all'))
############### Scroll Using Mouse Wheel ###############
def scroll(event, widget):
widget.yview_scroll(int(-1 * (event.delta / 120)), "units")
def final_scroll(event, widget, func):
widget.bind_all("<MouseWheel>", func)
def stop_scroll(event, widget):
widget.unbind_all("<MouseWheel>")
left_canvas.bind("<Enter>", lambda event: final_scroll(event, left_canvas, lambda event: scroll(event, left_canvas)))
left_canvas.bind("<Leave>", lambda event: stop_scroll(event, left_canvas))
########################################################################
######## Right Side ####################################################
right_container = tk.Frame(root, bg='orange')
right_container.grid(row=0, column=1, sticky='nsew')
right_container.columnconfigure(0, weight=1)
right_container.rowconfigure(0, weight=1)
right_canvas = tk.Canvas(right_container, bg='red')
right_canvas.grid(row=0, column=0, sticky='nsew')
right_scrollbar = tk.Scrollbar(right_container, orient='vertical', command=right_canvas.yview)
right_scrollbar.grid(row=0, column=1, sticky='nsew')
right_canvas['yscrollcommand'] = right_scrollbar.set
right_canvas.columnconfigure(0, weight=1)
right_canvas.rowconfigure(0, weight=1)
right_final_window = tk.Frame(right_canvas, bg='green')
right_canvas.create_window((0, 0), window=right_final_window, anchor='nw', tags='expand')
right_final_window.columnconfigure(0, weight=1)
for i in range(1, 51):
label = tk.Label(right_final_window, text=f'Manish Pushpam ({i})')
label.grid(row=i-1, column=0, sticky='nsew', pady=(0, 2))
right_canvas.bind_all('<Configure>', lambda event: right_canvas.itemconfigure('expand', width=event.width))
right_final_window.update_idletasks()
right_canvas.config(scrollregion=right_canvas.bbox('all'))
right_canvas.bind("<Enter>", lambda event: final_scroll(event, right_canvas, lambda event: scroll(event, right_canvas)))
right_canvas.bind("<Leave>", lambda event: stop_scroll(event, right_canvas))
root.mainloop()
</code></pre>