pyqt - 使用 QFileSystemModel 使用磁盘上的文件夹填充组合框

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

我在组合框中得到一个 / 而不是 /Users/ 目录下的整个文件夹列表。

我认为在效率方面使用 QFileSystemModel 而不是使用 os.listdir 更好,如果有人更新文件夹或在 中添加文件夹,我将更新 View /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()

关于pyqt - 使用 QFileSystemModel 使用磁盘上的文件夹填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462547/

相关文章:

qt - 在 QFileSystemModel() 中列出文件的最佳方法?

python - 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

python - PyQt 或 PySide - 使用哪一个

c++ - QT中如何将QComboBox值转换为int

qt - 如何为当前项目制作 QCombobox 绘画项目委托(delegate)? (Qt 4)

qt - 过滤 QFilesystemModel

python - 动态 QComboBox 填充取决于用户输入 PyQt5

python - mousepress事件的问题

c++ - Qt - 在 QSignalMapper 调用的函数中更新

c++ - 无法在 Qt 中删除 TreeView 的属性