1

我正在编写一个小的 Python 代码来加入文本文件,并且这些文件被选为用户输入。但重要的是我得到用户选择的顺序,因为我想以选定的顺序加入文件。但我看到 getOpenFileNames 返回的列表没有保留选择顺序。

有人对捕获选择顺序有什么建议吗?

谢谢你。

4

2 回答 2

1
self.filename = QtGui.QFileDialog.getOpenFileNames(
    self,
    "Cargar tu documento",
    self.lastOpenedFile,
    "*.doc;*.odt;*.pdf" )
于 2012-06-10T16:53:16.063 回答
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,用户可以一次添加一个文件。这将允许更好的概览以及从多个目录中轻松选择文件和更好的可扩展性(例如过滤、重新排列、排序选择)。

于 2012-06-10T17:55:29.260 回答