0

を設定しましgtk.TreeViewgtk.TreeStore。1つの列にはフォーマットされた金額が含まれており、次のようにその列による並べ替えを設定しました。

    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'

さらにプリントアウトしましたが、行を挿入すると、任意のxのいずれmodel[i1][x]かまたはforがNoneになるようです。model[i2][x]要素を含む行を挿入していないと確信Noneしています。では、どうなりますか?

4

1 に答える 1

1

ソートされたモデルに行を追加すると、GTK+ はその行の適切な位置を自動的に検索するため、その列にある場合はソート関数が呼び出されます。特別に処理するか、次のように呼び出しでNone初期値を指定する必要があります。append()

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

None後者はもちろん、おそらく空の文字列よりも適切なものを指定できる場合にのみ問題を解決します。

于 2010-10-03T19:44:11.780 に答える