Using a Treeview would suit you? It is not editable as a DataGrid, but you can achieve this in other ways.
Thiscodeisextensivelybasedonthepost Tkinter Multi-Column List Demo (I suggest a visit):
import Tkinter as tk
import ttk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.set_widgets()
def set_widgets(self):
# Inicia o Treeview com as seguintes colunas:
self.dataCols = ('country', 'capital', 'currency')
self.tree = ttk.Treeview(columns=self.dataCols, show='headings')
self.tree.grid(row=0, column=0, sticky=tk.N + tk.S + tk.W + tk.E)
# Barras de rolagem
ysb = ttk.Scrollbar(orient=tk.VERTICAL, command=self.tree.yview)
xsb = ttk.Scrollbar(orient=tk.HORIZONTAL, command=self.tree.xview)
self.tree['yscroll'] = ysb.set
self.tree['xscroll'] = xsb.set
ysb.grid(row=0, column=1, sticky=tk.N + tk.S)
xsb.grid(row=1, column=0, sticky=tk.E + tk.W)
# Define o textos do cabeçalho (nome em maiúsculas)
for c in self.dataCols:
self.tree.heading(c, text=c.title())
# Dados:
self.data = [
("Argentina", "Buenos Aires", "ARS"),
("Australia", "Canberra", "AUD"),
("Brazil", "Brazilia", "BRL"),
("Canada", "Ottawa", "CAD"),
("China", "Beijing", "CNY"),
("France", "Paris", "EUR"),
("Germany", "Berlin", "EUR"),
("India", "New Delhi", "INR"),
("Italy", "Rome", "EUR"),
("Japan", "Tokyo", "JPY"),
("Mexico", "Mexico City", "MXN"),
("Russia", "Moscow", "RUB"),
("South Africa", "Pretoria", "ZAR"),
("United Kingdom", "London", "GBP"),
("United States", "Washington, D.C.", "USD"),
]
# Insere cada item dos dados
for item in self.data:
self.tree.insert('', 'end', values=item)
if __name__ == '__main__':
root = tk.Tk()
app = Application(master=root)
app.mainloop()