基于列表动态构建PySide6 QTreeWidget节点的实现需求
动态生成QTreeWidget树形结构(基于点分隔字符串列表)
给定字符串列表:
item_list = ['pear.green', 'banana.yellow', 'banana.green', 'apple.green', 'apple.red']
需要生成的树形结构为:
- apple
- green
- red
- banana
- yellow
- green
- pear
- green
以下是实现动态构建的方法,替代手动编写的节点创建代码:
def build_tree_from_list(self, item_list): # 缓存已创建的顶级节点,避免重复创建 top_node_cache = {} for entry in item_list: # 拆分顶级节点(水果名)和子节点(颜色)文本 parent_text, child_text = entry.split('.') # 检查顶级节点是否已存在,不存在则创建并配置字体 if parent_text not in top_node_cache: parent_item = QtWidgets.QTreeWidgetItem(self.list) parent_item.setText(0, parent_text) parent_item.setFont(0, self.TOP_LEVEL_TREE_ITEM_FONT) top_node_cache[parent_text] = parent_item else: parent_item = top_node_cache[parent_text] # 创建子节点并添加到对应顶级节点下 child_item = QtWidgets.QTreeWidgetItem(parent_item) child_item.setText(0, child_text)
实现思路
- 节点缓存:用字典
top_node_cache存储已创建的顶级节点,确保每个水果名只创建一次顶级节点,避免重复。 - 字符串拆分:对每个列表条目按
.分割,分离出父节点和子节点的文本。 - 动态创建:遍历所有条目,按需创建顶级节点并配置字体,再创建对应的子节点挂载到父节点下。
这个方法无需关注列表的顺序,能自适应任意数量的点分隔条目,比手动编写节点代码更高效且易维护。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

