QFileDialog, открывающий два диалога
Я хочу сохранить местоположение выбранного файла в виде строки в Python. Я пытаюсь использовать QFileDialog для достижения этой цели, у меня есть:
self.filedialog = QtGui.QFileDialog(self)
self.filedialog.show()
filepath = str(self.filedialog.getOpenFileName())
Это открывает два окна QFileDialog. Интересно, что одно из окон не наследует "стиль" моего GUI, устанавливает мой setStyle, но возвращает строку filepath. Другой QFileDialog действительно наследует стиль, но не может вернуть строку filepath. Я нашел полезной документацию по QFileDialog, но не смог создать окно QFileDialog, которое одновременно генерирует строку filepath и наследует стиль моего GUI. Какую ошибку я делаю?
3 ответа
Вы на самом деле создали 2 окна.
Функция QFileDialog.getOpenFileName
статичен, что означает, что он создает свой собственный QFileDialog
объект, показывает окно, ждет, когда пользователь выберет файл, и возвращает выбранное имя файла.
Вам нужна только эта строка:
filepath = str(QFileDialog.getOpenFileName())
Если вы установите стиль на уровне приложения (с QApplication.setStyle
), это может быть применено к окну, если вы используете не родной диалог:
filepath = str(QFileDialog.getOpenFileName(options=QFileDialog.DontUseNativeDialog)))
getOpenFileName
удобная функция, которая "создает модальный диалог". Вот почему вы получаете второй диалог.
использование filedialog.exec()
показать диалог и fileDialog.selectedFiles()
чтобы получить имя файла.
exec - зарезервированное слово в python, вы должны использовать exec_().
dialog = QFileDialog(self)
dialog.exec_()
for file in dialog.selectedFiles():
print file