如何过滤掉 QTreeWidgetItemIterator 中不可检查的结果?
How to filter out results that are non-checkable in a QTreeWidgetItemIterator?
是否可以过滤 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
在此示例中,Header1
或 Header2
均不可检查,但位于它们下方的项目是可检查的。当我遍历 QTreeWidget
时,它 returns 整个列表。
查看 IteratorFlags 的文档,我可以看到可以设置的标志,但我不明白如何在 Python 中设置它们,我也不知道确保其中任何一个都能满足我的需要。
现在,val.isCheckable()
结果是 AttributeError
;这是预期的,因为 isCheckable()
似乎不是 QTreeWidgetItem
的属性 - 或者是?
最好我想过滤掉不可检查的项目,但如果这不可能,我如何检查值 isCheckable()
?
QTreeWidgetItem
class默认是checkable状态,checkable状态没有accessor方法。所以你需要使用 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)
是否可以过滤 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
在此示例中,Header1
或 Header2
均不可检查,但位于它们下方的项目是可检查的。当我遍历 QTreeWidget
时,它 returns 整个列表。
查看 IteratorFlags 的文档,我可以看到可以设置的标志,但我不明白如何在 Python 中设置它们,我也不知道确保其中任何一个都能满足我的需要。
现在,val.isCheckable()
结果是 AttributeError
;这是预期的,因为 isCheckable()
似乎不是 QTreeWidgetItem
的属性 - 或者是?
最好我想过滤掉不可检查的项目,但如果这不可能,我如何检查值 isCheckable()
?
QTreeWidgetItem
class默认是checkable状态,checkable状态没有accessor方法。所以你需要使用 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)