Python Qt QFileDialog::getopenFileNames - порядок выбора файлов

Я пишу небольшой код Python для объединения текстовых файлов, и эти файлы выбираются как пользовательский ввод. Но важно, чтобы я получил порядок выбора пользователей, так как я хочу объединить файлы в выбранном порядке. Но я вижу, что список, возвращаемый getOpenFileNames, не сохраняет порядок выбора.

У кого-нибудь есть предложение захватить порядок выбора?

Спасибо.

2 ответа

Решение

Первоначально я хотел предложить написать обратный вызов для сигнала 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()

Одна из проблем заключается в том, что порядок не указывается пользователю простым способом - текстовое поле "file" содержит имена упорядоченных файлов, но это грязно, когда вы выбираете более нескольких файлов. Лучшим, но немного более сложным подходом будет создание виджета или диалога с FileDialog для выбора файлов и List/TableWidget, содержащим файлы для обработки, где пользователь может добавлять файлы по одному за раз. Это позволило бы лучше просматривать, а также легко выбирать файлы из нескольких каталогов и улучшать расширяемость (например, фильтрация, перегруппировка, сортировка выбора).

self.filename = QtGui.QFileDialog.getOpenFileNames(
    self,
    "Cargar tu documento",
    self.lastOpenedFile,
    "*.doc;*.odt;*.pdf" )
Другие вопросы по тегам