我发现将一些Python2/Qt4代码转换为Python3/Qt5时,QStandardItem似乎不能再作为字典键使用,因为它没有实现__hash__,所以不再被视为不可变的。
以下是两个代码片段显示了这个问题:
PyQt4:
以下是两个代码片段显示了这个问题:
PyQt4:
>>> from PyQt4 import QtGui
>>> a = QtGui.QStandardItem()
>>> b = {}
>>> b[a] = "1"
>>> a.__hash__()
2100390
PyQt5:
>>> from PyQt5 import QtGui
>>> a = QtGui.QStandardItem()
>>> b = {}
>>> b[a] = "1"
TypeError: unhashable type: 'QStandardItem'
>>> a.__hash__()
TypeError: 'NoneType' object is not callable
这个更改是为什么做的?我不应该使用QStandardItem作为字典键吗?
明显的解决方法是子类化QStandardItem并重新实现一个简单版本的__hash__
(我已经这样做了)。但是我是否遗漏了什么?