Python QtreeWidget: jerarquía de árbol de retorno
Pregunta
Me quedé atrapado tratando de obtener la vista jerárquica de un árbol de widgets.
El código funciona bien y genera un bonito árbol como ese:
ROOT(Animal):
|
|
|___Not extinct:
. | (red)
. |_____BIRD--------------(blue)
. | (green)
|
| (red)
|_____Mammal------------(blue)
| (green)
|
| (red)
|_____Reptile-----------(blue)
(green)
Aquí está el código con la jerarquía de árbol:
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)
Aquí está el código para agregar las hojas al árbol:
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)
Entonces, tenemos la función que nos dice cada vez que se hace clic en el árbol y dónde se hizo clic:
def obj_treeViewInput(self,item,col):
print "obj _Qtree : pressed"
print "name:" item.text(col)
El problema es, ¿cómo podemos obtener si la hoja tocada (roja) pertenece al pájaro u otro padre, es decir, cómo obtener el siguiente resultado, haga clic con el mouse: Animal - No extinto - Mamífero - (rojo).
Todos los comentarios y sugerencias son muy apreciados.
Solución
¿Qué pasa con un método en cada QtreeWidgetItem en el que puede imprimir la ruta a este elemento?
En este método, puede usar la recursión para obtener la ruta completa de los elementos primarios del elemento (tiene un método "QTreeWidgetItem * parent () const" para hacer esto) y agrega el texto del elemento actual a la ruta de su elemento primario. Detiene la recursividad cuando un elemento no tiene ningún padre.
¡Espero haber entendido tu pregunta y esto te ayude un poco!
¿Tiene su propia clase QTreeWidgetItem? Podría usar un rol específico para lograr esto ...