2012-06-10 4 views
1

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

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

спасибо.

ответ

1

Первоначально я хотел предложить написание обратного вызова для currentChanged сигнала, который отслеживает выбор, но кажется, что этот сигнал не будет вызван при использовании getOpenFileNames. Альтернативой будет отображение диалога с show() и подключение обратного вызова к файламSelected, который вызывается после того, как пользователь нажимает кнопку «открыть» в диалоговом окне. Аргументом для обратного вызова является список с выбранными файлами, который, кажется, находится в порядке их выбора (просто протестировал его на 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, содержащих файлы для обработки, где пользователь мог бы добавлять файлы по одному за раз. Это позволит лучше просматривать, а также легко выбирать файлы из нескольких каталогов и улучшать расширяемость (например, фильтровать, переупорядочивать, сортировать выделение).

+0

Спасибо. Удивительно, что нет более простого способа сделать это. – madu

1
self.filename = QtGui.QFileDialog.getOpenFileNames(
    self, 
    "Cargar tu documento", 
    self.lastOpenedFile, 
    "*.doc;*.odt;*.pdf") 
+0

Не могли бы вы объяснить self.lastOpenedFile? Это не работает для меня. Благодарю. – madu