2009-12-01 201 views
0

我陷入了试图获取小部件树的层次视图。Python QtreeWidget:返回树层次结构

的代码工作正常,并产生一个很好的树那样:

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) 

的问题是,我们如何才能得到,如果触摸叶(红)属于鸟或其他的父亲,也就是如何得到下面的输出给一些鼠标点击: 动物 - 不已灭绝 - 哺乳动物 - (红色)。

所有的意见和建议,非常感谢。

回答

2

如何在每个QtreeWidgetItem中打印该项目的路径的方法。在这种方法中,你可以使用递归来获得项目父项的完整路径(你有一个“QTreeWidgetItem * parent()const”方法来做到这一点),并将当前项目的文本添加到其父路径!当一个项目没有任何父项时,您停止递归。

我希望我明白你的问题,这可以帮助你一点点!

你有你自己的QTreeWidgetItem类吗?你可以使用特定的角色来实现这个...

+0

你好安迪...谢谢你的建议。仍然没有时间来实施它。希望找到一个解决方案,然后张贴在这里。 – ThreaderSlash 2009-12-15 05:50:18