PyQt5:使用QFileDialog.getOpenFileNames保持选择顺序



我正在编写一个GUI,要求用户选择要打开的多个文件。为此,我使用QFileDialog。我需要跟踪用户选择文件的顺序,这可能吗?

我有以下内容:

filepath, _ = QFileDialog.getOpenFileNames(self, "Open File", "", "CSV Files(*.csv);;All Files (*)")

但filepath包含文件的路径,按照我在文件夹中找到它们的顺序排列,而不取决于选择顺序。我知道我可以要求用户一次选择一个文件,但由于要打开许多文件,这对用户来说很麻烦。

默认情况下,静态QFileDialog函数将显示本机文件对话框。似乎在您的系统上,本机文件对话框会自动对所选文件进行排序(可能并非所有平台都是这样(。然而,Qt的内置文件对话框没有这种行为,因此一个简单的解决方案是使用它:

filepaths, _ = QFileDialog.getOpenFileNames(
self, "Open File", "", "CSV Files(*.csv);;All Files (*)",
options=QFileDialog.DontUseNativeDialog)
print('n'.join(filepaths))

示例输出:

/home/foo/tmp/mbe-issue.csv
/home/foo/tmp/data.csv
/home/foo/tmp/test.csv
/home/foo/tmp/category_list.csv
/home/foo/tmp/data2.csv

这种行为没有明确记录,但它对我使用Qt-5.15.6和Qt-6.4.0都有效,所以它看起来是一个稳定的功能。

最新更新