【问题标题】:PyQt4 QTreeWidget parent and child indexesPyQt4 QTreeWidget 父子索引
【发布时间】:2017-01-15 18:42:14
【问题描述】:

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

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

【问题讨论】:

    标签: python pyqt4 qtreewidget qtreewidgetitem


    【解决方案1】:

    首先,如果您打算从方法访问小部件,我会将其设为您的育儿小部件/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)
    

    希望对您有所帮助。

    【讨论】:

    • 有效!出于文档目的,我将添加代码以在选择子项时返回父索引。 self.treeWidget.indexOfTopLevelItem(self.treeWidget.currentItem().parent())
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多