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/目录中添加文件夹,它将更新视图!
请记住,这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)