用于Gtk treeVi排序的多值排序比较器

2024-10-02 12:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我跟着python Gtk2 tutorial。可以根据自定义分隔符函数对treeView或listView元素进行排序:

def compare(model, row1, row2, user_data):
    sort_column = 0
    value1 = model.get_value(row1, sort_column)
    value2 = model.get_value(row2, sort_column)
    # here beginns the interresting part
    if value1 < value2:
        return -1
    elif value1 == value2:
        return 0
    else:
        return 1

在我的treeStore模型中,我存储了文件名和is\u目录bool值。排序应该是:先按字母顺序排列目录,然后按字母顺序排列文件。你知道吗

我需要调整comparator,因为它可以处理两个值:文件名和bool值(如果它们是或不是目录)。你知道吗

我试过:

def compareFileListEntries(self, fileListModel, row1, row2, user_data):

        name1 = fileListModel.get_value(row1, 1)
        name2 = fileListModel.get_value(row2, 1)
        isDir1 = fileListModel.get_value(row1, 2)
        isDir2 = fileListModel.get_value(row2, 2)

        if isDir1 < isDir2:
            return -1
        elif isDir1 > isDir2:
            return 1
        else:
            if name1 < name2:
                return -1
            elif name1 == name2:
                return 0
            else:
                return 1

这将首先对目录进行排序-按随机顺序,然后对文件也进行随机排序。有人能指出我的错误吗?你知道吗


Tags: 目录getmodelreturnif排序valuecolumn
1条回答
网友
1楼 · 发布于 2024-10-02 12:34:09

问题在另一部分。上面的代码基本上没问题。我做了一些修改,所以排序工作如下:目录优先,字母顺序,不区分大小写。这些名称存储在我的treeStore模型的第一列中,isDirectory值存储在第二列中。以下是我结束时的代码:

def compareFileListEntries(self, fileListModel, row1, row2, user_data):

        name1 = fileListModel.get_value(row1, 0).lower()
        name2 = fileListModel.get_value(row2, 0).lower()
        isDir1 = fileListModel.get_value(row1, 1)
        isDir2 = fileListModel.get_value(row2, 1)

        if isDir1 > isDir2:
            return -1
        elif isDir1 < isDir2:
            return 1
        else:
            if name1 < name2:
                return -1
            elif name1 == name2:
                return 0
            else:
                return 1

相关问题 更多 >

    热门问题