Python QtreeWidget: вернуть иерархию дерева - PullRequest
0 голосов
/ 01 декабря 2009

Я застрял в попытке получить иерархическое представление дерева виджетов.

Код работает нормально и генерирует красивое дерево, подобное этому:

ROOT(Animal): 
| 
| 
|___Not extinct:
.         |                       (red)
.         |_____BIRD--------------(blue)
.         |                       (green)
          | 
          |                       (red)
          |_____Mammal------------(blue)
          |                       (green)
          | 
          |                       (red)
          |_____Reptile-----------(blue)
                                  (green)

Вот код с древовидной иерархией:

def myTreeWDG(self):
    ....
    """define tree"""
    self.obj_animalTreeWDG = QtGui.QTreeWidget(self.obj_viewGroupBox)
    self.obj_animalTreeWDG.setGeometry(QtCore.QRect(10, 20, 191, 131))
    self.obj_animalTreeWDG.setObjectName("obj_animalTreeWDG")
    """ROOT: animal"""
    obj_parent1 = QtGui.QTreeWidgetItem(self.obj_animalTreeWDG)
    """not extinct:"""
    obj_childView1_1 = QtGui.QTreeWidgetItem()
    obj_parent1.addChild(obj_childView1_1)
    """bird"""
    obj_childView1_1_1 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_1)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_1)
    """mamal"""
    obj_childView1_1_2 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_2)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_2) 
    """reptile"""
    obj_childView1_1_3 = QtGui.QTreeWidgetItem()
    obj_childView1_1.addChild(obj_childView1_1_3)
    """3: red, blue, green"""
    total=3
    self.insert_treeLeaves(total,obj_childView1_1_3) 
    """connect event"""
    QtCore.QObject.connect(self.obj_animalTreeWDG, QtCore.SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.obj_treeViewInput)

Вот код для добавления листьев в дерево:

def insert_treeLeaves(self,total,tree_directParent):
    for i in range(0,total):
        """leaves with color name"""
        tree_child_leaf = QtGui.QTreeWidgetItem()
        tree_directParent.addChild(tree_child_leaf)

Затем у нас есть функция, которая сообщает нам каждый раз, когда щелкают дерево, и где оно было щелкнуто:

def obj_treeViewInput(self,item,col):
    print "obj _Qtree : pressed"
    print "name:" item.text(col)

Проблема в том, как мы можем получить, если затронутый лист (красный) принадлежит Птице или другому отцу, то есть, как получить следующий вывод, щелкнув мышью: Животное - Не вымершее - Млекопитающее - (красное).

Все комментарии и предложения высоко ценятся.

1 Ответ

2 голосов
/ 01 декабря 2009

Как насчет метода в каждом QtreeWidgetItem, в котором вы можете напечатать путь к этому элементу.

В этом методе вы можете использовать рекурсию для получения полного пути родителей элемента (для этого у вас есть метод «QTreeWidgetItem * parent () const»), и вы добавляете текст текущего элемента в путь его родителя! Вы останавливаете рекурсию, когда у элемента нет родителя.

Надеюсь, я понял ваш вопрос, и это вам немного поможет!

У вас есть свой собственный класс QTreeWidgetItem? Вы могли бы использовать определенную роль для достижения этого ...

...