我需要实现排序功能,单击树视图表中的列标题即可根据该列对数据进行排序。排序应在升序和降序之间切换 这是我的示例代码
def sort_by_column(self, tree, col, reverse):
# Collect data for each row
data = [(tree.set(row, col), row) for row in tree.get_children()]
# Sort the data based on the values
data.sort(reverse=reverse)
for index in range(len(data)):
val, row = data[index]
tree.move(row, '', index)
tree.heading(col, command=lambda c=col: self.sort_by_column(tree, c, not reverse))
但是当我在列之间单击时它正在工作,但排序不正确,任何人都可以帮助我。我被这个问题困扰了将近两天。
我做了很多改变,这是我最后的改变。我什么也想不出来
由于从TreeView中检索到的数据全部转换为字符串,因此排序结果不是您期望的数字结果。
您可以创建一个函数将这些数字转换为浮点数,并使用该函数作为排序函数:
def sorting(x):
try:
# if it can be converted to float number, return the float number
return float(x[0]) # first item in x (a list/tuple) is used for sorting
except:
# otherwise just return whatever it is
return x[0]
...
data.sort(key=sorting, reverse=reverse) # use the above function for sorting