gpt4 book ai didi

python - 如何过滤掉 QTreeWidgetItemIterator 中不可检查的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:08 25 4
gpt4 key购买 nike

是否可以过滤QTreeWidgetItemIterator,以便从结果中省略不可检查的项目?

TreeList = ({
'Header1': (('Item11', 'Item12', )),
'Header2': (('Item21', 'Item22', )),
})

# LOCATED IN `initLayout` METHOD
for key, value in TreeList.items():
parent = QTreeWidgetItem(self.ListTreeView, [key])
for val in value:
child = QTreeWidgetItem([val])
child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
child.setCheckState(0, Qt.Unchecked)
parent.addChild(child)

# LOCATED IN `initialize` METHOD
iterator = QTreeWidgetItemIterator(self.ListTreeView)
while iterator.value():
val = iterator.value()

try: # Results in object has not attribute
if val.isCheckable():
print('checkable')
except AttributeError as e:
print(e)

iterator += 1

在此示例中,Header1Header2 均不可检查,但位于它们下方的项目可以检查。当我迭代 QTreeWidget 时,它返回整个列表。

查看 IteratorFlags 的文档,我可以看到有一些标志可以设置,但我不明白如何在 Python 中设置它们,并且我不确定它们中的任何一个是否能满足我的需求。

现在,val.isCheckable() 会导致 AttributeError;这是预期的,因为 isCheckable() 似乎不是 QTreeWidgetItem 的属性 - 或者是吗?

最好我想过滤掉不可检查的项目,但如果这是不可能的,我如何检查值是否isCheckable()

最佳答案

QTreeWidgetItem 类默认是可检查的,并且没有可检查状态的访问器方法。所以你需要使用 item-flags 来代替:

iterator = QTreeWidgetItemIterator(self.ListTreeView)
while iterator.value():
val = iterator.value()
if val.flags() & Qt.ItemIsUserCheckable:
print('checkable')
iterator += 1

鉴于此,您还需要明确取消设置想要检查的项目的标志:

for key, value in TreeList.items():
parent = QTreeWidgetItem(self.ListTreeView, [key])
# remove checkable flag for header items
parent.setFlags(parent.flags() & ~Qt.ItemIsUserCheckable)

关于python - 如何过滤掉 QTreeWidgetItemIterator 中不可检查的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741032/

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