【问题标题】:Getting the full index name from selection in QTreeView从 QTreeView 中的选择中获取完整的索引名称
【发布时间】:2019-01-04 01:34:50
【问题描述】:

我使用 PyQt 创建了一个QTreeView,在 TreeView 中,它填充了如下层次结构:

|- users
|--|-- John
|--|--|--- graphics
|--|-- Alice

在我的 TreeView 中,我选择了graphics

虽然我可以按如下方式获取选择的索引/名称:

for sel in self.tree_view.selectedIndexes():
    sel_name = sel.data()

上面的代码只会返回我graphics。如何获得“完整”路径,使其返回“/users/John/graphics”?

【问题讨论】:

    标签: python pyqt qtreeview


    【解决方案1】:

    要获得完整的索引名称,您必须遍历父级,如下所示:

    for sel in self.tree_view.selectedIndexes():
        val = "/"+sel.data()
        while sel.parent().isValid():
            sel = sel.parent()
            val = "/"+ sel.data()+ val
        print(val)
    

    例子:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    tree = {
    'users': {
        "John" : ["graphics"],
        "Alice": []
        }
    }
    
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.tree_view = QtWidgets.QTreeView()
            self.setCentralWidget(self.tree_view)
    
            model = QtGui.QStandardItemModel()
            self.populateTree(tree, model.invisibleRootItem())
            self.tree_view.setModel(model)
            self.tree_view.expandAll()
            self.tree_view.selectionModel().selectionChanged.connect(self.onSelectionChanged)
    
        def populateTree(self, children, parent):
            for child in children:
                child_item = QtGui.QStandardItem(child)
                parent.appendRow(child_item)
                if isinstance(children, dict):
                    self.populateTree(children[child], child_item)
    
        def onSelectionChanged(self, *args):
            for sel in self.tree_view.selectedIndexes():
                val = "/"+sel.data()
                while sel.parent().isValid():
                    sel = sel.parent()
                    val = "/"+ sel.data()+ val
                print(val)
    
    
    if __name__ == '__main__':
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多