Barra de desplazamiento de lienzo tkinter con cuadrícula?

Relativamente nuevo en Tkinter y Python. Así que tengan paciencia conmigo.

Estoy tratando de mostrar la siguiente GUI y quiero tener una barra de desplazamiento en Frame2 para mostrar solo botones 5x5 a la vez. Parece que Tkinter Frames no admite la barra de desplazamiento y, por lo tanto, agregó un lienzo (dentro del cual está incrustado el marco) y una barra de desplazamiento en el marco principal 'FMas'. Pero por alguna razón, la barra de desplazamiento va al extremo derecho de la pantalla y no hace ningún desplazamiento.

¿No debería terminar el lienzo en el borde de Frame2 y la barra de desplazamiento debe estar justo al lado? Además, probé la enrutamiento para aumentar la altura de la barra de desplazamiento para que coincida con la altura de los botones 5x5. Eso tampoco funciona.

CÓDIGO (Usando Python3.2):

from tkinter import *
import tkinter.ttk as ttk

mGui = Tk()

mGui.geometry("630x600")
mGui.configure(background="Gray")

mGui.columnconfigure(0, weight=1)
mGui.rowconfigure(0, weight=1)

FMas = Frame(mGui, bg="Gray")
FMas.grid(sticky=(N,E,S,W))

FMas.columnconfigure(0, weight=1)

L1 = Label(FMas, text="Frame 1 Contents")
L1.grid(row=0, column=0, pady=5, sticky=(N,W))

F1 = Frame(FMas, bg="Green", bd=2, relief=GROOVE)
F1.grid(row=1, column=0, sticky=(N,W))

ChkBox1=IntVar()
CB1 = Checkbutton(F1, text="StartCheckBox", variable=ChkBox1)
CB1.grid(row=0,column=0,padx=2)

L2 = Label(FMas, text="Frame 2 Contents")
L2.grid(row=2, column=0, pady=5, sticky=(N,W))

Can1 = Canvas(FMas, bg="Yellow")
Can1.grid(row=3, column=0, sticky=(N,W))

F2 = Frame(Can1, bg="Blue", bd=2, relief=GROOVE)
F2.grid(row=0, column=0, sticky=(N,W))

rows = 10
for i in range(1,rows):
    for j in range(1,6):
        button = Button(F2, padx=7, pady=7, text="[%d,%d]" % (i,j))
        button.grid(row=i, column=j, sticky='news')

vsbar = Scrollbar(FMas, orient="vertical", command=Can1.yview)
vsbar.grid(row=3, column=1)

Can1.configure(yscrollcommand=vsbar.set, scrollregion=Can1.bbox("all"))

L3 = Label(FMas, text="Frame 3 Contents")
L3.grid(row=4, column=0, pady=5, sticky=(N,W))

F3 = Frame(FMas, bg="Red", bd=2, relief=GROOVE)
F3.grid(row=5, column=0, sticky=(N,W))

ChkBox2=IntVar()
CB2 = Checkbutton(F3, text="EndCheckBox", variable=ChkBox2)
CB2.grid(row=0,column=0,padx=2)

mGui.mainloop()
sys.exit()

Respuestas a la pregunta(2)

Su respuesta a la pregunta