Python QtreeWidget: hierarquia de árvore de retorno
Pergunta
eu fiquei preso na tentativa de obter a visão hierárquica de uma árvore widget.
O código funciona bem e gera uma árvore agradável assim:
ROOT(Animal):
|
|
|___Not extinct:
. | (red)
. |_____BIRD--------------(blue)
. | (green)
|
| (red)
|_____Mammal------------(blue)
| (green)
|
| (red)
|_____Reptile-----------(blue)
(green)
Aqui está o código com a hierarquia de árvore:
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)
Aqui está o código para adicionar as folhas na árvore:
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)
Em seguida, temos a função que nos diz toda vez que a árvore é clicado, e onde foi clicado:
def obj_treeViewInput(self,item,col):
print "obj _Qtree : pressed"
print "name:" item.text(col)
O problema é, como podemos obter se a folha tocado (vermelho) pertence ao pássaro ou outro pai, ou seja, como obter o seguinte resultado dar algum clique do mouse: Animal - Não extinta - Mamífero -. (Vermelho)
Todos os comentários e sugestões são muito apreciados.
Solução
Que tal um método em cada QtreeWidgetItem em que você poderia imprimir o caminho para esse item.
Neste método, você poderia usar recursão para obter o caminho completo dos pais do item (você tem um método "QTreeWidgetItem * parent () const" para fazer isso) e você adicionar texto do item atual para o caminho de seu pai! Você parar a recursão quando um item não tem qualquer pai.
Espero que eu entendi a sua pergunta e isso ajuda um pouco!
Você tem sua própria classe QTreeWidgetItem? Você poderia usar um papel específico a alcançar este ...