Заполнение поля со списком папок на диске с помощью 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()

Я получаю / в комобоксе вместо всего списка папок под /Users/ каталог.

Я думаю, что лучше использовать QFileSystemModel Вместо того, чтобы использовать os.listdir и будет обновлять представление, если кто-то обновит папку или добавит папку в /Users/ каталог!

1 ответ

Решение

Помни что 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()
Другие вопросы по тегам