2015-09-08 125 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 interns效率,如果有人更新文件夾或在/Users/目錄中添加文件夾,將更新視圖!

回答

4

請記住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()