Если это простая конструкция с несколькими строками данных, для которых не требуются полосы прокрутки и т. Д., Самый простой способ - не разделять заголовки и строки данных на разные поля.Просто добавьте все в сетку, и он автоматически настроится:
from tkinter import *
root = Tk()
data_list = [('No.', 'Name', 'Data'),
(1, 'Amazon', 'Books'),
(2, 'Python', 'Programming language')]
for index, data in enumerate(data_list):
a = Label(root, text=data[0], bg='khaki')
a.grid(row=index, column=0, sticky='e', pady=(5,0), padx=(5,0))
b = Label(root, text=data[1], bg='khaki')
b.grid(row=index, column=1, sticky='w', pady=(5,0), padx=(5,0))
c = Label(root, text=data[2], bg='khaki')
c.grid(row=index, column=2, sticky='w', pady=(5,0), padx=(5,0))
root.mainloop()
Если это большие объемы данных, полосы прокрутки и т. Д., Вы должны исследовать древовидную структуру.