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