Я нашел очень дрянное, не чистое решение, но, похоже, оно работает. По какой-то причине открытие QFileDialog
напрямую не позволяет мне активировать его. Он открывается за активным окном, из которого он был вызван (окно терминала или браузер в Jupyter Notebook) и не отвечает на клавиатуру. Таким образом, функция save
в следующем блоке НЕ работает должным образом для Ma c:
from PyQt5.QtWidgets import QApplication, QFileDialog
def save(directory='./', filters="All files (*)"):
app = QApplication([directory])
path, _ = QFileDialog.getSaveFileName(caption="Save to file",
filter=filters,
options=options)
return path
Что работает, если диалоговое окно файла открывается из виджета. Поэтому работа с фиктивным виджетом, который никогда не появляется на экране, работает для меня, по крайней мере, из командной строки:
from PyQt5.QtWidgets import (QApplication, QFileDialog, QWidget)
class DummySaveFileDialogWidget(QWidget):
def __init__(self, title="Save file", filters="All Files (*)"):
super().__init__()
self.title = title
self.filters = filters
self.fname = self.savefiledialog()
def savefiledialog(self):
filename, _ = QFileDialog.getSaveFileName(caption=self.title,
filter=self.filters,
options=options)
return filename
def save(directory='./', filters="All files (*)"):
app = QApplication([directory])
form = DummySaveFileDialogWidget()
return form.fname
Если кто-нибудь найдет более элегантное решение, которое работает, дайте мне знать
РЕДАКТИРОВАТЬ: это работает, когда он вызывается из командной строки, но все же не из ноутбука Jupyter . Также попробовал это , безуспешно. Диалоговое окно файла остается за окном браузера и не отвечает на клавиатуру.