Python 如何按照在pyqt中选择的方式对文件进行排序?

Python 如何按照在pyqt中选择的方式对文件进行排序?,python,pyqt,qfiledialog,Python,Pyqt,Qfiledialog,我有可以选择多个文件并打印其名称的代码。但我发现它们不是我选择它们的顺序。例如,如果我的文件名为file1、file2、file3,如果我先选择file2,然后选择file3,然后选择file1,打印时它会按此顺序显示file1、file2、file3。 我写的代码是这样的 global desktop1 global filesnames1 file_name = QtGui.QFileDialog() file = file_name.getOpenFileN

我有可以选择多个文件并打印其名称的代码。但我发现它们不是我选择它们的顺序。例如,如果我的文件名为file1、file2、file3,如果我先选择file2,然后选择file3,然后选择file1,打印时它会按此顺序显示file1、file2、file3。 我写的代码是这样的

    global desktop1
    global filesnames1
    file_name = QtGui.QFileDialog()
    file = file_name.getOpenFileNames(self, "Select the file to add", desktop1,
                                                      "source File (*.MOV;*.MP4)")

    filesnames1=list(file)
    for i in filesnames1:
       print i

请帮助我如何实现我想要的。

我不认为有什么方法可以实现这一点,但您可以编写一个函数来获取选择,并将其与上一个进行比较,然后将该函数连接到QFileDialog的激活:

global desktop1
global previous_selection
global filesnames1
QtGui.QFileDialog.currentChanged(get_selection)
file_name = QtGui.QFileDialog()


def get_selection(previous_selection):
    file = file_name.getOpenFileNames(self, "Select the file to add", desktop1,
                                                  "source File (*.MOV;*.MP4)")
    selected_files=list(file)
    if len(selected_files) > 1:
        current_file = selected_files-filenames1
        filenames1.append(current_file)
    else:
        filenames1=list()
        filenames1.append(selected_files[0])
我没有尝试过那段代码,但我认为类似的东西可以达到目的。

默认情况下,(比如
getOpenFileNames
)会尽可能打开本机文件对话框。对于本机文件对话框,Qt无法控制返回文件的顺序,因此您无法更改它

但是,似乎内置的Qt文件对话框会按照选择的顺序返回文件。因此,如果您不需要本机文件对话框,只需执行以下操作:

files = QFileDialog.getOpenFileNames(
    self, "Select the file to add", desktop1, "source File (*.mov *.mp4)",
    options=QFileDialog.DontUseNativeDialog
    )

我找到了解决方案,而不是将变量声明为list,我们需要将其声明为set,因为list总是将元素排序为as set不排序的位置。这是完全错误的。集合没有定义的顺序。如果您将文件列表转换为一个集合,那么当您对它们进行迭代时,如果它们以您想要的顺序出现,那将是纯粹的巧合。试着选择更多的文件:几乎可以肯定,当你对它们进行迭代时,它们会以“错误”的顺序出现。@ekhumoro是的,你是对的。很抱歉在没有正确检查的情况下做出d决定。我真的不希望它能像那样工作(因为我没有尝试过),我只是想向你展示一些可以工作的想法。如果没有人首先回答,我将尝试在访问python编辑器后提供更好的工具。尝试使用此代码时,它不会显示.MOV或.MP4文件。事实上,在尝试使用其他文件时,它不会显示任何文件types@RamakantaChandra. 嗯,我只是复制了你的代码,我认为这是可行的。无论如何,我已经编辑了我的答案,这对我在linux上的工作很好。