Зачем меню делать? это же неудобно, не надо делать так как ненадо - сделай как все везде привыкли при клике по колонке:
первый клик по колонке по возрастанию второй по убыванию ["^","v"] индикаторы сортировки
####
rev = {"#%d"%x:False for x in range(1,8)}
def treeview_sort_column(tv, col):
l = [(tv.set(k, col), k) for k in tv.get_children('')]
l.sort(reverse=rev[col])
for k in rev.keys():
tv.heading(k,text=tv.heading(k,"text").replace("v","").replace("^",""))
tv.heading(col,text=["^","v"][rev[col]]+tv.heading(col,"text"))
rev[col]=not rev[col]
for index, (val, k) in enumerate(l):
tv.move(k, '', index)
tree.place()
tree.heading("#1", text=" Код", command=lambda:treeview_sort_column(tree,"#1"))
tree.column("#1", minwidth=0, width=35)
tree.heading("#2", text=" Фамилия", command=lambda:treeview_sort_column(tree,"#2"))
tree.heading("#3", text=" Имя", command=lambda:treeview_sort_column(tree,"#3"))
tree.heading("#4", text=" Отчество", command=lambda:treeview_sort_column(tree,"#4"))
tree.heading("#5", text=" Год", command=lambda:treeview_sort_column(tree,"#5"))
tree.column("#5", minwidth=0, width=90)
tree.heading("#6", text=" Школа", command=lambda:treeview_sort_column(tree,"#6"))
tree.column("#6", minwidth=0, width=50)
tree.heading("#7", text=" Класс", command=lambda:treeview_sort_column(tree,"#7"))
####
можно конечно и значек выводить в заголовке, но это так муторно писать)))