Мне сложно понять, как установить многоуровневый QTree с помощью QTreeView и QStandardItemModel.Многоуровневый QTreeView
Вот что у меня есть:
from PySide.QtGui import *
import sys
class MainFrame(QWidget):
def __init__(self):
QWidget.__init__(self)
tree = {'root': {
"1": ["A", "B", "C"],
"2": {
"2-1": ["G", "H", "I"],
"2-2": ["J", "K", "L"]},
"3": ["D", "E", "F"]}
}
self.tree = QTreeView(self)
root_model = QStandardItemModel()
self.tree.setModel(root_model)
for r,root in enumerate(sorted(tree)):
root_item = QStandardItem(root)
root_model.setItem(r,root_item)
for c,child in enumerate(sorted(tree[root])):
child_model = QStandardItemModel(root_model)
child_item = QStandardItem(child)
child_model.setItem(c, child_item)
for gc, grand_child in enumerate(sorted(tree[root][child])):
grand_child_model = QStandardItemModel(child_model)
grand_child_item = QStandardItem(grand_child)
grand_child_model.setItem(gc,grand_child_item)
if type(tree[root][child]) == dict:
for ggc, gran_grand_child in enumerate(sorted(tree[root][child][grand_child])):
gran_grand_child_model = QStandardItemModel(grand_child_model)
gran_grand_child_item = QStandardItem(gran_grand_child)
gran_grand_child_model.setItem(ggc, gran_grand_child_item)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = MainFrame()
main.show()
sys.exit(app.exec_())
Я хочу, чтобы выглядеть следующим образом:
До сих пор только «корень» пункт показывает, что это не бросать какие-либо ошибки.
Кроме того, я сделал это для петель в некоторой спешке, это очень трудно читать/понимать, потому что у него слишком много вложенных циклов. Интересно, есть ли лучший способ расширить дерево на основе исходного dict.
Отлично, приятно прикасаться на рекурсии, никогда бы не подумал об этом. –