PyQt4 QTreeWidget父子索引

时间:2017-01-15 18:42:15

标签: python pyqt4 qtreewidget qtreewidgetitem

我创建了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 )

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

2 个答案:

答案 0 :(得分:0)

首先,如果您计划从方法访问小部件,我会将其作为您的父级小部件/ 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)

希望有所帮助。

答案 1 :(得分:0)

我已经解决了这一问题,方法是从当前选定的项目一直迭代到使用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]