1

GUI リスト ボックスに情報を表示しようとしています。必要な情報を出力する MVC のモデルのみの部分にテスト メソッドを記述しました。ただし、そのコードを完全な GUI に転送すると、エラーがスローされます。

以下に 2 つのコードを示します。

モデル: (このメソッドはクラス用に記述されていることに注意してくださいProducts())

def test(self):
    for key in self._items_list:
        print self.get_item(key) #this refers to the get_item function of the Products class:

def get_item(self, key):
    return self._items_list[key] # items_list is a dictionary

したがって、これはリストボックスに入れたい出力を返します。

コードを GUI に転送する方法は次のとおりです (これは、Listbox から継承する定義済みのクラスにあります)。

def refreshData(self):
    for keys in self._productslist: #this productslist is equivalent to items_list
        disp = self._products.get_item(keys) #so i can call the method from the Product class
        self.insert(END, dips)

ファイルを開いて表示しようとすると、次のエラーがスローされます。

...in get_item
return self._items_list[key]
TypeError: unhashable type: 'list'

申し訳ありませんが、これは長く、おそらく非常に紛らわしいですが、本質的に、分離モデルではなく、コードの完全バージョンでメソッドのエラーが発生する理由を知りたいです。

私が知る限り、関連するコードはすべて同じです。

どんなアイデアでも大歓迎です!

4

2 に答える 2

1

リストをハッシュすることはできません。不変のものだけです。__hash__オブジェクトの一部を拡張するためのメソッドを定義することもできますが、listこのロジックの背後にある理由は、何かを辞書で調べた場合、エントリの名前が変更されないと予想されるからです。同様に、Python では、キーは不変でなければなりません。別の答えが言ったように、tuple代わりに a を使用してください。

于 2012-10-01T01:02:01.507 に答える
0

代わりにタプルを使用してください: http://wiki.python.org/moin/DictionaryKeys

于 2012-10-01T00:26:42.543 に答える