Pyqt5 输入 dict\list\str 生成treeWidget

在网上看了很多代码,感觉算法都不够优雅,封装得不够完美。
于是我自己就写了一个。

def generateTreeWidget(self, dictData):

        # 传入dictData参数,就是要生成tree的数据

        tree = QTreeWidget()  # 创建tree组件
        tree.setColumnCount(2)  # 有两列,分别显示key,value
        tree.setHeaderLabels(['key', 'value'])  # 设置两列的列名
        root = QTreeWidgetItem(tree)  # 创建tree组件的根
        root.setText(0, 'root')  # 根的key叫做‘root’,叫做其他的也可以,根没有value,就不设置

        # 通过dfs深度优先搜索来遍历整个dictData,有点抽象,下面我也不懂怎么注释
        # 但整个过程就像一棵树先长出树干、再长出树枝、再长出叶子
 
        def dfs(father, child):
            if type(child) is dict:
                for key in child:
                    childWidget = QTreeWidgetItem()
                    childWidget.setText(0, key)
                    father.addChild(childWidget)
                    dfs(childWidget, child[key])
                pass
            elif type(child) is list:
                for i in range(0, len(child)):
                    childWidget = QTreeWidgetItem()
                    childWidget.setText(0, str(i))
                    father.addChild(childWidget)
                    dfs(childWidget, child[i])
            else:
                father.setText(1, str(child))
                pass

        # 运行dfs函数来让树生长
        dfs(root, dictData)

        # 收尾工作
        widget = QWidget()
        mainBox = QVBoxLayout()
        mainBox.addWidget(tree)
        widget.setLayout(mainBox)

        # 优雅的返回一个QWidget对象
        return widget
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值