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