Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将QFileSystemModel与QSortFilterProxyModel组合时崩溃_Python_Pyqt_Pyqt5_Qfilesystemmodel - Fatal编程技术网

Python 将QFileSystemModel与QSortFilterProxyModel组合时崩溃

Python 将QFileSystemModel与QSortFilterProxyModel组合时崩溃,python,pyqt,pyqt5,qfilesystemmodel,Python,Pyqt,Pyqt5,Qfilesystemmodel,我有QFileSystemModel和QSortFilterProxyModel。当我试图调用QfileSysteModel.filePath获取文件的当前索引时,错误出现为核心转储。这是一段代码 le = QLineEdit() lv = QListView() file_model = QFileSystemModel() file_model.setRootPath(QtCore.QDir.rootPath()) proxy_model = QS

我有QFileSystemModel和QSortFilterProxyModel。当我试图调用
QfileSysteModel.filePath
获取文件的当前索引时,错误出现为
核心转储
。这是一段代码

    le = QLineEdit()
    lv = QListView()

    file_model = QFileSystemModel()
    file_model.setRootPath(QtCore.QDir.rootPath())

    proxy_model = QSortFilterProxyModel(
        recursiveFilteringEnabled=True,
        filterRole=QtWidgets.QFileSystemModel.FileNameRole)
    proxy_model.setSourceModel(file_model)
    lv.setModel(self.proxy_model)
它工作得很好,但当我尝试调用
QFileSystemModel
核心转储的任何方法时。比如说

filepath  = file_model.filePath(lv.currentIndex())
如何使用
QfileSystemModel

from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        le = QtWidgets.QLineEdit()
        self.lv = QtWidgets.QListView()

        self.file_model = QtWidgets.QFileSystemModel()
        self.file_model.setRootPath(QtCore.QDir.rootPath())

        self.proxy_model = QtCore.QSortFilterProxyModel(
            recursiveFilteringEnabled=True,
            filterRole=QtWidgets.QFileSystemModel.FileNameRole)
        self.proxy_model.setSourceModel(self.file_model)
        self.lv.setModel(self.proxy_model)
        root_index = self.file_model.index(QtCore.QDir.rootPath())
        proxy_index = self.proxy_model.mapFromSource(root_index)
        self.lv.setRootIndex(proxy_index)
        self.lv.doubleClicked.connect(self.navigate)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(le)
        lay.addWidget(self.lv)


    def navigate(self):

        # Get the path of file or folder
        filepath  = self.file_model.filePath(self.lv.currentIndex())
        print(filepath)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

使用代理模型时,代理的
modelnex
与源模型中的索引不同。用于从代理模型转换为源模型

在您的情况下,它可能如下所示:

# alternative one: do not reference proxy_model directly
filepath = file_model.filePath(lv.model().mapToSource(lv.currentIndex()))
# alternative two:
filepath = file_model.filePath(self.proxy_model.mapToSource(lv.currentIndex()))

提供什么是
self.files
。。。。对不起,这个错误。我修改了它,它是文件模型。我会尽量提供一个简短的代码,因为它是长代码。我没有得到任何错误,如果你想要帮助,你必须提供一个MRE。一个MRE必须是小的,但最重要的是,它必须是可复制的。