pyqt QTreeWidget关于Root项和相应子项的一些操作

查找指定节点所对应的根节点:


    def getTreeWidgetRootItem(self, Item = None):
        """
        根据给定节点 Item 递归查找对应的根节点索引号
        如果 Item 为空,则获取当前选中节点索引号,并上推根节点的索引号
        :param index:
        :return:
        """
        if Item == None:
            currentItem = self.treeWidget.currentItem()
            parentItem = currentItem.parent()
        else:
            currentItem = Item
            parentItem = currentItem.parent()
        # 如果不是ROOT节点,则继续
        if parentItem != None:
            rootItem = self.getTreeWidgetRootItem(parentItem)
        else:
            rootItem = currentItem
        return rootItem

遍历指定根节点下的所有子节点

    def seekTreeChild(self, treeItem):
        """
        递归搜索包括指定 item 及以下的所有项的信息,放入字典中返回
        :param treeItem:
        :return:
        """
        data = {}
        # 检查是否已经标注了属性标签,如果已经标注则保存
        # 如果有更多列的数据需要取得,做相应的处理
        attr = treeItem.text(1)
        if attr != "":
            data.setdefault("attr")
            data["attr"] = eval(attr)
        # 查看子项的个数,如果有子项,则读取子项
        childCount = treeItem.childCount()
        if childCount > 0:
            # 标记本项下面有子项
            data.setdefault("child")
            childData = {}
            for i in range(childCount):
                # 取得子项的索引地址,并把子项记录在字典里
                childItem = treeItem.child(i)
                key = childItem.text(0)
                childData.setdefault(key)
                # 递归搜索更下层的子项
                result = self.seekTreeChild(childItem)
                childData[key] = result
            data["child"] = childData
        return data

遍历所有根节点及子节点

    def treeWidget2Json(self):
        """
        把 treeWidget 中的数据转换为 Json 格式的数据,
        本函数处理 Root 项,并调用子项的递归搜索函数
        :return:
        """
        data = {}
        # 获取最顶级节点的总数
        rootCount = self.treeWidget.topLevelItemCount() 
        for i in range(rootCount):
            # 取得顶层项的item索引地址
            rootItem = self.treeWidget.topLevelItem(i)
            rootKey = rootItem.text(0)
            data.setdefault(rootKey)
            result = self.seekTreeChild(rootItem)
            data[rootKey] = result
        return data

根据传入的根节点名称,增加根节点


    def addRootItem(self, text):
        """
        增加一个根节点 text
        :param text: 要增加的根节点名称
        :return: 
        """
        # 在treeWidget增加Root项
        rootItem = QtWidgets.QTreeWidgetItem(self.treeWidget)
        rootItem.setText(0, text)

根据传入的节点 Item 和节点名称,增加子节点


    def addChildItem(self, item, text):
        """
        在指定节点下面增加一个子节点
        :param Item:
        :param text:
        :return:
        """
        # 把子项添加到treeWidget中
        childItem = QtWidgets.QTreeWidgetItem(item)
        childItem.setText(0, text)

删除指定节点下面的所有子节点


    def delChildItem(self, item):
        """
        删除指定节点 item 下面的所有子节点
        :param item:
        :return:
        """
        childCount = item.childCount()
        for i in range(childCount):
            # 取得当前选中项的子项索引地址
            childItem = item.child(0)
            item.removeChild(childItem)

删除指定节点


    def delItem(self, item):
        """
        删除指定节点 item,如果指定节点不是根节点,则通过上层节点进行删除
        如果 item 是根节点,则取得索引号,通过索引号进行删除
        :param item:
        :return:
        """
        if item.parent() != None:
            item.parent().removeChild(item)
        else:
            rootIndex = self.treeWidget.indexOfTopLevelItem(item)
            self.treeWidget.takeTopLevelItem(rootIndex)

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值