PyQt4 QTreeWidget 父子索引

PyQt4 QTreeWidget parent and child indexes

我创建了 PyQt4 QTreeWidget 并添加了以下 QTreeWidgetItem 结构。

treeWidget = QTreeWidget()

twi = QTreeWidgetItem(['Level_1'])
twi.addChild( QTreeWidgetItem( ['SubLevel_1_1'] ) )
twi.addChild( QTreeWidgetItem( ['SubLevel_1_2'] ) )
twi.addChild( QTreeWidgetItem( ['SubLevel_1_3'] ) )
twi.addChild( QTreeWidgetItem( ['SubLevel_1_4'] ) )

treeWidget.addTopLevelItem( twi )

我想在选择子项目时获得父(顶级项目)和子索引。

首先,如果您打算从一个方法访问一个小部件,我会将其设为 属性 您的育儿 widget/GUI,所以

self.treeWidget = QTreeWidget()

然后在您的示例中您忘记添加顶级项目

self.treeWidget.insertTopLevelItem(0,twi)

要找出您当前的选择,您可以添加如下内容:

def getCurrentItems(self):

    """Returns Current top level item and child index.
    If no child is selected, returns -1. 
    """

    #Check if top level item is selected or child selected
    if self.treeWidget.indexOfTopLevelItem(self.treeWidget.currentItem())==-1:
        return self.treeWidget.currentItem().parent(),self.treeWidget.currentItem().parent().indexOfChild(self.treeWidget.currentItem())
    else:   
        return self.treeWidget.currentItem(),-1

然后连接方法通过:

self.treeWidget.itemActivated.connect(self.getCurrentItems)

希望对您有所帮助。

我已经解决了这个问题,方法是从当前选定的项目一直迭代到使用 while 循环跟踪项目的父级。请注意,我为此代码使用 PyQt5/PySide2。

treewidget = self.ui.treeWidget_size
# Initialise an Empty list to store the indexes
level_list = []

current_item = treewidget.currentItem()
current_index = treewidget.indexFromItem(current_item)

if current_index.isValid():
    level_list.append(current_index.row())

# Iterate through all the item's parents
while current_index.isValid():
    current_item = treewidget.itemFromIndex(current_index.parent())

    # Get the parent of the item and find the index of it's parent until we reach the top
    current_index = treewidget.indexFromItem(current_item)
    if current_index.isValid():
        level_list.append(current_index.row())

#Once done getting indexes, reverse_list
level_list = level_list[::-1]