追加列的行为与appendRow类似

时间:2015-01-13 12:00:26

标签: python qt pyqt pyside qtreeview

我试图做一棵树:

因此,我已使用此设置第一列:

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)))

相同

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

目前我有这个:

enter image description here

但我想要这个:

enter image description here

1 个答案:

答案 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)