Python QListWidgetItem对象是不可修复的,它是一个bug或存在';原因是什么?
我偶然发现了这一点(显然,这是一个更大应用程序的摘录): 如果您运行此操作,在最后一行您将获得:Python QListWidgetItem对象是不可修复的,它是一个bug或存在';原因是什么?,python,pyside2,Python,Pyside2,我偶然发现了这一点(显然,这是一个更大应用程序的摘录): 如果您运行此操作,在最后一行您将获得: TypeError: unhashable type: 'PySide2.QtWidgets.QListWidgetItem' 据我所知,任何Qt对象都可以用作dict键,就像任何用户定义的类实例一样 我正在Windows7上运行PySide2 5.13.0和Python3.6.4。我在Ubuntu18.04、Python3.6.9、PySide 5.9.0a1上也遇到了同样的错误 感谢您的提示。
TypeError: unhashable type: 'PySide2.QtWidgets.QListWidgetItem'
据我所知,任何Qt对象都可以用作dict键,就像任何用户定义的类实例一样
我正在Windows7上运行PySide2 5.13.0和Python3.6.4。我在Ubuntu18.04、Python3.6.9、PySide 5.9.0a1上也遇到了同样的错误
感谢您的提示。QListWidgetItem(类似于QTableWidgetItem和QTreeWidgetItem)不是哈希表,因为与行关联的QListWidgetItem可以在没有通知的情况下更改,而不像QWidget、QPushButton等QObject
如果您的目标是将信息与QListWidgetItem关联,则可以使用setData()
和data()
方法
导入系统
从PySide2.QtCore导入Qt
从PySide2.QtWidgets导入QApplication、QListWidget、QListWidgetItem、QWidget
如果名称=“\uuuuu main\uuuuuuuu”:
app=QApplication(sys.argv)
w=QListWidget()
对于范围(10)内的i:
it=QListWidgetItem(“abc-{}”.format(i))
setData(Qt.UserRole,“data-{}”.format(i))
w、 附加项(it)
_currentItemChanged()上的定义:
当前=w.currentItem()
打印(当前.data(Qt.UserRole))
w、 currentItemChanged.connect(在\u currentItemChanged上)
w、 show()
sys.exit(app.exec_())
我不认为这是一个bug,似乎您希望QListWidgetItem是可哈希的,但它似乎不是为此而设计的。为什么需要QListWidgetItem作为字典的键?因为我希望将信息关联到字典中的一组QListWidgetItem,并在通过QListView.currentItem()通过插槽o获取特定QListWidgetItem时轻松检索这些信息。我已经用QPushButtons和许多其他Qt对象实现了这一点。您正在将pythonic解决方案应用到一个不使用python设计基础的框架中,因此许多python解决方案无法在Qt中工作,Qt是一个可以自行工作的库,因此,正如我在回答中所建议的,它可以为您想要的东西提供替代方案。
TypeError: unhashable type: 'PySide2.QtWidgets.QListWidgetItem'