首页 > 解决方案 > 加快 QFileDialog 文件浏览器在默认目录中显示文件夹/文件的速度

问题描述

操作系统:Win10,QT:PySide2

我在 python 中实现了一个程序,它从相机中获取图像。通过按下“开始序列”按钮触发该图像采集序列。为了确定我使用 QFileDialog 的图像的保存目录。因此,“开始序列”按钮首先打开一个文件浏览器,用户可以在其中选择要存储序列的文件夹。然后开始图像采集。文件浏览器的代码如下所示:

def get_dir(self, name) # name is only a string
    start_dir = "D://data_someperson//"
    dialog = QFileDialog()
    options = dialog.Options()
    options |= dialog.DontUseNativeDialog # i dont know what this is doing, but without it nothing works
    dialog.setFileMode(QFileDialog.Directory)
    filename = dialog.getExistingDirectory( None, name, start_dir, options = options)
    return filename

如上所述,上面的代码在“start_dir”位置打开了一个文件浏览器。因此,文件浏览器将在“D://data_someperson//”中启动,用户可以从中创建新文件夹或选择现有文件夹。然后将其作为“文件名”返回,其中图像采集代码存储相机图片。现在这在 start_dir 等于我的程序的工作目录的条件下有效。例如,我在“D://data_otto”中通过 VScode 运行我的主程序,并且 start_dir 设置为“D://data_otto”。在这里,文件浏览器会立即(弹出时)显示“D://data_otto”中的所有现有文件,用户可以轻松创建新文件夹而不会出现任何问题。

我现在的问题如下:如果“start_dir”不等于“D://data_otto”(例如,它 start_dir 等于“D://data_peter”),文件浏览器会像往常一样在“start_dir”中弹出,但是基本上尝试“加载”我机器上的每个现有文件,然后在“start_dir”中显示文件,用户应该在其中选择一个保存目录。当用户在“start_dir”中创建新文件夹时也是如此。如果用户创建一个新文件夹并在 gui 中确认它,函数“getExistingDirectory”仍然等待所有文件被加载,有点在后台。

这会使我的数据采集延迟一分钟。“D://”是硬盘 DT01ACA100 1TB 和 ~800Gb 被占用。我认为我的问题可以通过使用更快的驱动器来解决,但是必须有一种方法来限制 Filebrowser 加载以显示的文件范围,但我在文档中找不到这样的解决方法......我观察到,文件夹start_dir 中的文件在加载一小段时间后会被缓存。延长这段时间也会有所帮助......

标签: pythonpython-3.xqtpyside2qfiledialog

解决方案


好的,我通过断开两个无法访问的“网络位置”作为驱动器“Y:”和“Z:”出现在“这台电脑”下,解决了我的问题。它们无法访问(在资源管理器中显示为红十字),因为 PC 已与其本地网络断开连接并移至另一个网络。因此,只需右键单击它们并在下拉菜单中选择“断开连接”即可删除这些“网络位置”。之后,文件浏览器不再有任何问题,所需的一切都会立即显示出来。不再有延迟/加载/缓冲。感谢https://stackoverflow.com/users/2001654/musicamante


推荐阅读