Размещение кнопок сеткой Python, grid

С python только знакомлюсь. Не могу понять почему кнопки размещаются списком не сеткой

button_list = list()
    for i in self.__position_list.get_position_list():
        b = tk.Button(frame_button, text=i.get_name(), width="20", font=('Arial', 12), command=lambda i=i: self.add_button_list_clicked(i.get_position()))
        button_list.append(b)

    r = 0
    for i in button_list:
        for j in range(0, 3):
            i.grid(row=r, column=j)
        r += 1

Полный блок кода

frame_main = tk.Frame(self.main_window) frame_main.place(x=550, y=30)

    canvas = tk.Canvas(frame_main, width=572, height=465)
    canvas.grid(row=0, column=0)

    vsb = tk.Scrollbar(frame_main, orient="vertical", command=canvas.yview)
    vsb.grid(row=0, column=1, sticky='ns')
    canvas.configure(yscrollcommand=vsb.set)

    frame_button = tk.Frame(canvas)
    canvas.create_window((1, 0), window=frame_button, anchor='nw')

    # #Рабочий вариант но дублирует кнопки
    button_list = list()
    for i in self.__position_list.get_position_list():
        b = tk.Button(frame_button, text=i.get_name(), width="20", font=('Arial', 12), command=lambda i=i: self.add_button_list_clicked(i.get_position()))
        button_list.append(b)

    r = 0
    for i in button_list:
        for j in range(0, 3):
            i.grid(row=r, column=j)
        r += 1

frame_button.update_idletasks()

    frame_main.config(width=1, height=1)

    canvas.config(scrollregion=canvas.bbox("all"))

Ответы (0 шт):