我创建了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 )
我希望在选择的子项目时获得父级(顶级项目)和子索引。
答案 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]