递归TreeItems搜索

字母数字

我有QTreeWidget嵌套的父子项:

Tree:
    parent1:
           childA1
           childA2
           childA3:
                  childB1
                  childB2:
                         childC1

使用:

    allItems=[]
    for i in range(Tree.topLevelItemCount()):
        item=Tree.topLevelItem(i)
        allItems.add(item)

我访问第一级项目“ A” :childA1, childA2 and childA3

现在,我迭代每个第一级项目“ A”以访问其子级-第二级项目“ B”:

    for i in range(Tree.topLevelItemCount()):
        item=Tree.topLevelItem(i)

        for m in range(item.childCount()):
            childItem=item.child(m)
            allItems.add(childItem)

在第二层,我不知道下面是否有任何第三层项“ C”。如何确保函数向下扩展到嵌套项以下的深度,然后将这些项添加到allItems列表中,直到到达末尾?

字母数字

下面的代码创建QTreeWidget带有嵌套项的代码

Tree的getItemsRecursively()方法扫描Tree,直到到达底部项目为止,并返回Tree中所有项目的列表。

在此处输入图片说明

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__()
        for name in ['Item_A0', 'Item_A1', 'Item_A2']: 
            itemA=QtGui.QTreeWidgetItem([name])

            self.addTopLevelItem(itemA)
            if name=='Item_A1':
                item_B0=QtGui.QTreeWidgetItem(['Item_B0'])
                itemA.insertChild(0, item_B0)
                itemA.insertChild(1, QtGui.QTreeWidgetItem(['Item_B1']))

                item_C0=QtGui.QTreeWidgetItem(['Item_C0'])
                item_B0.insertChild(0, item_C0)
                item_B0.insertChild(0, QtGui.QTreeWidgetItem(['Item_C1']))

        self.resize(360,240)
        self.show()

    def getItemsRecursively(self):
        total=[]
        def serchChildItem(item=None):
            if not item: return
            for m in range(item.childCount()): 
                childItem=item.child(m)                
                if not childItem: continue
                total.append(childItem)   
                serchChildItem(childItem)

        for i in range(self.topLevelItemCount()):
            item=self.topLevelItem(i)
            if not item: continue
            total.append(item)
            serchChildItem(item)
        return total

tree=Tree()
total=tree.getItemsRecursively()
print 'Total number of Tree items: %s'%len(total)
sys.exit(app.exec_())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章