Почему моя функция сортировки GtkTreeView получает строку с None? - PullRequest
0 голосов
/ 01 октября 2010

Я настроил gtk.TreeView с gtk.TreeStore.Один столбец содержит отформатированные суммы в долларах, и я настроил сортировку по этому столбцу следующим образом:

    def sortmon(model, i1, i2):
        v1 = model[i1][COL_MONEY]
        v2 = model[i2][COL_MONEY]
        return cmp(float(v1.replace("$","").replace(",","")),
                   float(v2.replace("$","").replace(",","")))
    self.hsModel.set_sort_func(COL_MONEY, sortmon)

Это работает нормально, за исключением того, что иногда, когда я добавляю строку, я получаю:

stderr      : INFO     Traceback (most recent call last):
stderr      : INFO       File "C:\Users\DrClaud\bumhunter\gui\widgets\replay\ReplayWidget.py", line 141, in sortpot
stderr      : INFO         float(v2.replace("$","").replace(",","")))
stderr      : INFO     AttributeError: 'NoneType' object has no attribute 'replace'

Я сделал больше распечаток, и кажется, что когда я вставляю строку, одно из model[i1][x] или model[i2][x] для любого x будет None.Я уверен, что я не вставляю строку с None элементами в ней .. так что же происходит?

1 Ответ

1 голос
/ 03 октября 2010

Если вы добавляете строку в отсортированную модель, GTK + автоматически ищет подходящую позицию для нее, и, таким образом, ваша функция сортировки вызывается, если она находится в этом столбце. Вы должны либо обработать None специально, либо указать начальные значения в вызове append(), например:

model.append (parent, [x, y, z])

Последнее, конечно, решает проблему, только если вы можете указать что-то более подходящее, чем None, возможно, пустую строку.

...