PYTHON - 不可用清单

时间:2012-10-01 00:24:28

标签: python model-view-controller list user-interface tkinter

我正在尝试在GUI列表框中显示一些信息。我在我的MVC的仅模型部分编写了一个测试方法,它输出了我想要的信息;但是,当我将该代码传输到我的完整GUI时,它会抛出一个错误。

以下是两段代码:

型号(请注意,此方法是为类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'

对不起,这很长,可能很混乱,但基本上我想知道为什么我在代码的完整版本而不是在隔离模型中得到方法的错误。

据我所知,所有相关代码都是相同的。

任何想法都将不胜感激!

2 个答案:

答案 0 :(得分:1)

你不能哈希列表,只能是不可变的东西。虽然您可以为__hash__对象的某些扩展定义list方法,但这个逻辑背后的原因是,如果您要在字典中查找某些内容,您会希望条目的名称不是更改。类似地,在python中,键必须是不可变的。如另一个答案所述,请改用tuple

答案 1 :(得分:0)