appendColumn 表现得像 appendRow

appendColumn bahaving like appendRow

我正在尝试制作一棵树:

所以我已经使用这个设置了第一列:

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...)填充树,但不会添加数字。

因为如果 children 的类型不是字典(它无法访问 children[child]),它会在递归中引发错误

我对他们进行了类型检查:

if type(children) == dict:
    # above code ...
else:
    parent.appendColumn([QStandardItem(str(children))])

但奇怪的是,它的行为与使用 parent.appendRow(QStandardItem(str(children)))

相同

它将数字放置为当前项目的子项。我想把它放在旁边,同一行,下一列。

目前我有这个:

但我想要这个:

您需要增加模型的列数才能显示第二列:

    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)