使用QFileSystemModel用磁盘上的文件夹填充组合框

Cia*_*arz 3 pyqt qcombobox qfilesystemmodel

嗨,我已经编写了此基本代码,试图填充/Users/目录下的文件夹,但是我不知道我缺少它未填充的内容。

import sys

from PyQt4 import QtGui 
from PyQt4 import QtCore


class MyWindow(QtGui.QWidget):
    """docstring for MyWindow"""
    def __init__(self, parent=None):
        super(MyWindow, self).__init__()
        self.setup()

    def setup(self):
        fsm = QtGui.QFileSystemModel()
        fsm.setRootPath("/Users/")
        layout = QtGui.QVBoxLayout()
        combo = QtGui.QComboBox()
        combo.setModel(fsm)
        layout.addWidget(combo)
        self.setLayout(layout)



def main():
    app = QtGui.QApplication(sys.argv)
    win = MyWindow()
    win.show()
    win.raise_()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

/在comobobox而不是目录下的文件夹的整个列表中得到一个/Users/

我认为最好使用QFileSystemModel而不是os.listdir效率的术语,如果有人更新文件夹或在/Users/目录中添加文件夹,它将更新视图!

Tim*_*ham 5

请记住,这QFileSystemModel是一个分层模型,因此您需要QComboBox知道哪个QModelIndex代表要显示的子代。你这样做QComboBox.setRootModelIndex()

QFileSystemModel.setRootPath()方便地返回QModelIndex您设置的路径。

因此,您只需要进行一点更改(在Windows上进行了测试)-

import sys

from PyQt4 import QtGui 
from PyQt4 import QtCore


class MyWindow(QtGui.QWidget):
    """docstring for MyWindow"""
    def __init__(self, parent=None):
        super(MyWindow, self).__init__()
        self.setup()

    def setup(self):
        fsm = QtGui.QFileSystemModel()
        index = fsm.setRootPath("/Users/")
        layout = QtGui.QVBoxLayout()
        combo = QtGui.QComboBox()
        combo.setModel(fsm)
        combo.setRootModelIndex(index)
        layout.addWidget(combo)
        self.setLayout(layout)

def main():
    app = QtGui.QApplication(sys.argv)
    win = MyWindow()
    win.show()
    win.raise_()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)