Vittawat Laorungroj
Vittawat Laorungroj

Reputation: 99

treeview sort column with float number

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

Answers (1)

Vittawat Laorungroj
Vittawat Laorungroj

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

Related Questions