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" )