gpt4 book ai didi

python - QListWidgetItem 对象是不可散列的,这是一个错误还是有原因?

转载 作者:行者123 更新时间:2023-12-01 00:10:01 24 4
gpt4 key购买 nike

我偶然发现了这个(显然,这是一个更大的应用程序的摘录):

import sys
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *

if __name__ == '__main__':

app = QApplication(sys.argv)

d = {}

widget = QWidget()
d[widget] = 'hashable'

item = QListWidgetItem('abc')
d[item] = 'unhashable'

如果你运行这个,在最后一行你会得到:

TypeError: unhashable type: 'PySide2.QtWidgets.QListWidgetItem'

据我所知,任何 Qt 对象都可以用作字典键,就像任何用户定义的类实例一样。

我在 Windows 7 上运行 PySide2 5.13.0、Python 3.6.4。我在 Ubuntu 18.04、Python 3.6.9、PySide 5.9.0a1 上遇到相同的错误。

感谢您的任何提示。

最佳答案

QListWidgetItem(类似于 QTableWidgetItem 和 QTreeWidgetItem)不是哈希表,因为与行关联的 QListWidgetItem 可以在没有通知的情况下更改,这与 QObject(例如 QWidget、QPushButton 等)不同。

如果您的目标是将信息与 QListWidgetItem 关联起来,那么您可以使用 setData()data() 方法。

import sys

from PySide2.QtCore import Qt
from PySide2.QtWidgets import QApplication, QListWidget, QListWidgetItem, QWidget

if __name__ == "__main__":

app = QApplication(sys.argv)

w = QListWidget()

for i in range(10):
it = QListWidgetItem("abc-{}".format(i))
it.setData(Qt.UserRole, "data-{}".format(i))
w.addItem(it)

def on_currentItemChanged():
current = w.currentItem()
print(current.data(Qt.UserRole))

w.currentItemChanged.connect(on_currentItemChanged)
w.show()
sys.exit(app.exec_())

关于python - QListWidgetItem 对象是不可散列的,这是一个错误还是有原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com