如何使用 QTreeWidget 在 <list> 中的 <item>

Posted

技术标签:

【中文标题】如何使用 QTreeWidget 在 <list> 中的 <item>【英文标题】:How to use for <item> in <list> with QTreeWidget 【发布时间】:2020-01-28 23:10:48 【问题描述】:

我有一个 QTreeWidgetItem 对象列表,当我在 &lt;list&gt; 测试中使用 &lt;item&gt; 时,我得到了 NotImplementedError。有谁知道我必须在 QTreeWidgetItem 上实现什么才能使其正常工作?我尝试重载哈希运算符,但没有解决它 - 我得到了同样的错误。

from PySide2 import QtWidgets
_list = [QtWidgets.QTreeWidgetItem() for _idx in range(3)]
print _list[1] in _list

这是错误信息:

# Error: operator not implemented.
# Traceback (most recent call last):
#   File "<maya console>", line 2, in <module>
# NotImplementedError: operator not implemented. # 

【问题讨论】:

这能回答你的问题吗? Compare objects and search in list 如重复答案中所述:这是一个 pyside2 错误,但通常没有必要,如果您正在寻找特定项目,则必须使用 QTreeWidget 中的findItems 方法跨度> 嗯,这对我来说真的不起作用,我需要查找当前是否选择了触发回调的项目 - 但现在我知道这是一个错误,我可以找到解决方法,我可以使用 QTreeWidgetItem .被选中。谢谢你的信息:) 你意识到,你有一个XY problem,你的问题应该是:如何知道一个项目是否被选中?为此,没有必要使用“in”运算符。 不是真的 - 我知道如何找到一个项目是否被选中。问这个问题对我了解我的代码为什么不起作用很有用;如果 PySide2 中没有那个错误,我应该能够使用我的解决方案。 【参考方案1】:

就像在 cmets 中提到的那样,这是一个错误。以下是使用 id() 的解决方法,您可以使用它来代替:

from PySide2 import QtWidgets


_list = [QtWidgets.QTreeWidgetItem() for _idx in range(3)]
removed_item = _list.pop(1)
_ids = [id(item) for item in _list]
print id(removed_item) in (_ids)  # Returns False

【讨论】:

以上是关于如何使用 QTreeWidget 在 <list> 中的 <item>的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QStyledItemDelegate 在 QTreeWidget 中拥有不同高度的 QTreeWidgetItems?

悬停时如何更改QTreewidget标题背景

QTreeWidget 选择第一项

如何对 QTreeWidget 列进行排序?

向 QTreeWidget 添加一行

QT 中QtreeWidget使用