Reputation: 99
I tried to sorting column by clicking on heading but the result is error.
I would like to reorder it by both name and number
def treeview_sort_column(product_table, col, reverse):
l = [(product_table.set(k, col), k) for k in product_table.get_children('')]
l.sort(key=lambda t: float(t[0]), reverse=reverse)
for index, (val, k) in enumerate(l):
product_table.move(k, '', index)
product_table.heading(col, command=lambda _col=col: treeview_sort_column(product_table, _col, not reverse))
when I try to reorder the number it show error.
ValueError: could not convert string to float: '3,046.00'
Upvotes: 0
Views: 234
Reputation: 99
full function to clicking on column header to reorder both of name and number.
def treeview_sort_column(product_table, col, reverse):
l = [(product_table.set(k, col), k) for k in product_table.get_children('')]
try:
l.sort(key=lambda t: float(t[0].replace(",","")), reverse=reverse)
except:
l.sort(reverse=reverse)
for index, (val, k) in enumerate(l):
product_table.move(k, '', index)
product_table.heading(col, command=lambda _col=col: treeview_sort_column(product_table, _col, not reverse))
for col in header:
product_table.heading(col, text=col,command=lambda _col=col: treeview_sort_column(product_table, _col, False))
Upvotes: 2