我正在编写一个小的Python代码来连接文本文件,并选择这些文件作为用户输入。但重要的是我得到用户选择的顺序,因为我想以所选顺序加入文件。但是我看到getOpenFileNames返回的列表不保留选择顺序。
有人有任何建议来捕捉选择顺序吗?
谢谢。
答案 0 :(得分:1)
self.filename = QtGui.QFileDialog.getOpenFileNames(
self,
"Cargar tu documento",
self.lastOpenedFile,
"*.doc;*.odt;*.pdf" )
答案 1 :(得分:1)
我原本想建议为追踪选择的currentChanged信号编写一个回调函数,但似乎在使用getOpenFileNames时不会调用此信号。另一种方法是使用show()显示对话框并将回调连接到filesSelected,这是在用户单击对话框上的“打开”按钮后调用的。回调的参数是一个包含所选文件的列表,这些文件似乎按其选择的顺序排列(仅在python3 / pyqt4上测试)。
def callback(files):
joined_files = ''.join([open(f).read() for f in files])
do_something_with(joined_files)
dialog = QtGui.QFileDialog()
dialog.setFileMode(3) #allow selection of multiple files
dialog.filesSelected.connect(callback)
dialog.show()
这样做的一个问题是订单没有以简单的方式显示给用户 - “文件”文本框包含有序文件的名称,但是当您选择多个文件时这很麻烦。一个更好但稍微复杂的方法是构建一个小部件或对话框,其中FileDialog用于选择文件,一个List / TableWidget包含要处理的文件,用户可以一次添加一个文件。这将允许更好的覆盖以及从多个目录中轻松选择文件和更好的可扩展性(例如,过滤,重新排列,对选择进行排序)。