我试图做一棵树:
因此,我已使用此设置第一列:
self._populate_tree(data, self.tree_model.invisibleRootItem())
def _populate_tree(self, children, parent):
for child in sorted(children):
child_item = QStandardItem(str(child))
parent.appendRow(child_item)
self._populate_tree(children[child], child_item)
示例数据如下:
data = {'Day 1':
{'Completed':
{'CR_10': 2, 'M_12': 1, 'RE_23': 1},
'Missed':
{'WM_11': 1, 'DW_5': 2, 'BT_22': 1},
'Score': '-6'
}
}
它用字符串填充树(第1天,已完成,未接,CR_10 ......),但它不会添加数字。
如果孩子的类型不是dict(它不能访问孩子[child]),它会在递归中引发错误
他们进行了类型检查:
if type(children) == dict:
# above code ...
else:
parent.appendColumn([QStandardItem(str(children))])
但是它的行为与使用parent.appendRow(QStandardItem(str(children)))
它将数字作为当前项目的子项。我想把它放在旁边,同一行,下一列。
目前我有这个:
但我想要这个:
答案 0 :(得分:1)
您需要增加模型的列数才能显示第二列:
root_model = QStandardItemModel()
root_model.setColumnCount(2)
您还需要将一行子项添加为列表:
def _populate_tree(self, children, parent):
for child in sorted(children):
child_item = QStandardItem(str(child))
row = [child_item]
if isinstance(children[child], dict):
self._populate_tree(children[child], child_item)
else:
item = QStandardItem(str(children[child]))
row.append(item)
parent.appendRow(row)