Несколько файлов и выбор папок в QFileDialog?
Я использую pyQt4 и хочу иметь кнопку обзора в моем GUI, которая открывает диалоговое окно, позволяющее пользователю выбирать несколько файлов и папки. Я исследовал довольно много, но не нашел никакого способа сделать это.
В QFileDialog.getOpenFileNames () позволяет мне выбирать только файлы и QFileDialog.getExistingDirectory () позволяет выбирать только каталоги.
есть ли способ каким-то образом объединить их функциональность. В идеале я хотел бы использовать nativeDialogs, но это, похоже, невозможно. В результате я готов пойти на компромисс относительно внешности. Есть ли способ реализовать сказанное?
тот же вопрос был задан и здесь, но ответ находится на c++. Мне нужна реализация python. разрешить пользователю выбрать файл или папку в QFileDialog
2 ответов
вот хак, который должен работать для вас: создайте подкласс QFileDialog, который отключает кнопку "Открыть" и снова подключает ее к настроенной функции. Однако это не гарантирует работу в разных версиях Qt, так как это зависит от возможности найти определенные суб-виджеты, которые могут быть реконфигурированы в какой-то момент.
class FileDialog(QtGui.QFileDialog):
def __init__(self, *args):
QtGui.QFileDialog.__init__(self, *args)
self.setOption(self.DontUseNativeDialog, True)
self.setFileMode(self.ExistingFiles)
btns = self.findChildren(QtGui.QPushButton)
self.openBtn = [x for x in btns if 'open' in str(x.text()).lower()][0]
self.openBtn.clicked.disconnect()
self.openBtn.clicked.connect(self.openClicked)
self.tree = self.findChild(QtGui.QTreeView)
def openClicked(self):
inds = self.tree.selectionModel().selectedIndexes()
files = []
for i in inds:
if i.column() == 0:
files.append(os.path.join(str(self.directory().absolutePath()),str(i.data().toString())))
self.selectedFiles = files
self.hide()
def filesSelected(self):
return self.selectedFiles
в Qt5 вы можете просто использовать
return QtWidgets.QFileDialog.getOpenFileNames(self, title, directory, filter=filterFile)