2015-09-08 2 views
2

Привет, я написал этот базовый код, пытаясь заполнить папки под каталогом /Users/, но я не знаю, чего у меня не хватает, не заполняя его.заполняющая поле со списком с папками на диске с использованием QFileSystemModel

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() 

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

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

ответ

4

Помните, что QFileSystemModel является иерархической моделью, поэтому вам необходимо сообщить 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() 
Смежные вопросы