From fcaf4a8af08b09d014d116a6d0bda7b1f5da9b15 Mon Sep 17 00:00:00 2001 From: Simon Renblad Date: Wed, 30 Aug 2023 16:36:16 +0800 Subject: [PATCH] gui.tools: add get_save_file_name helper --- artiq/gui/tools.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/artiq/gui/tools.py b/artiq/gui/tools.py index 441da9b81..2171ab915 100644 --- a/artiq/gui/tools.py +++ b/artiq/gui/tools.py @@ -69,6 +69,23 @@ async def get_open_file_name(parent, caption, dir, filter): return await fut +async def get_save_file_name(parent, caption, dir, filter, suffix=None): + """like QtWidgets.QFileDialog.getSaveFileName(), but a coroutine""" + dialog = QtWidgets.QFileDialog(parent, caption, dir, filter) + dialog.setFileMode(dialog.AnyFile) + dialog.setAcceptMode(dialog.AcceptSave) + if suffix is not None: + dialog.setDefaultSuffix(suffix) + fut = asyncio.Future() + + def on_accept(): + fut.set_result(dialog.selectedFiles()[0]) + dialog.accepted.connect(on_accept) + dialog.rejected.connect(fut.cancel) + dialog.open() + return await fut + + # Based on: # http://stackoverflow.com/questions/250890/using-qsortfilterproxymodel-with-a-tree-model class QRecursiveFilterProxyModel(QtCore.QSortFilterProxyModel):