0

我已经设置了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元素的行。那么会发生什么?

4

1 回答 1

1

如果您将一行附加到已排序的模型,GTK+ 会自动为其搜索适当的位置,因此如果它在该列上,则调用您的排序函数。您应该None特别处理,或者在调用中指定初始值append(),例如:

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

后者当然只有在您可以指定比 更合适的东西时才能解决问题None,也许是一个空字符串。

于 2010-10-03T19:44:11.780 回答