我正在创建一个个人财务追踪器,我需要一个排序功能,但我对此感到困惑

问题描述 投票:0回答:1

我需要实现排序功能,单击树视图表中的列标题即可根据该列对数据进行排序。排序应在升序和降序之间切换 这是我的示例代码

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))

但是当我在列之间单击时它正在工作,但排序不正确,任何人都可以帮助我。我被这个问题困扰了将近两天。

我做了很多改变,这是我最后的改变。我什么也想不出来

python python-3.x class sorting tkinter
1个回答
0
投票

由于从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
© www.soinside.com 2019 - 2024. All rights reserved.