使用 QFileSystemModel 使用磁盘上的文件夹填充组合框
populating combo box with folders on disk using 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/
目录中添加文件夹,我将更新视图!
记住 QFileSystemModel
是分层模型,因此您需要让 QComboBox
知道哪个 QModelIndex
代表您要显示的子项。你用 QComboBox.setRootModelIndex()
QFileSystemModel.setRootPath()
方便returns你设置的路径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()
您好,我已经编写了这段基本代码,试图填充 /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/
目录中添加文件夹,我将更新视图!
记住 QFileSystemModel
是分层模型,因此您需要让 QComboBox
知道哪个 QModelIndex
代表您要显示的子项。你用 QComboBox.setRootModelIndex()
QFileSystemModel.setRootPath()
方便returns你设置的路径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()