"""Functions for user interaction with paths and file names.Note-----These functions start a QT app and might interfere with previously started apps."""from__future__importannotationsfromlocan.dependenciesimportHAS_DEPENDENCY,needs_packageifHAS_DEPENDENCY["qt"]:fromqtpy.QtWidgetsimportQApplication,QFileDialogfromlocan.configurationimportQT_BINDINGfromlocan.dependenciesimportQtBindings__all__:list[str]=["file_dialog","set_file_path_dialog"]
[docs]@needs_package("qt")deffile_dialog(directory:str|None=None,message:str="Select a file...",filter:str="Text files (*.txt);; All files (*)",)->str|list[str]:""" Select file names in a ui dialog. Parameters ---------- directory directory path to start dialog in. If None the current directory is used. message Hint what to do filter filter for file type Returns ------- str | list[str] list with file names or empty list """ifdirectoryisNone:directory_="./"else:directory_=str(directory)ifQT_BINDING==QtBindings.PYSIDE2:app=(QApplication.instance())# this is needed if the function is called twice in a row.ifappisNone:app=QApplication([])# todo: [directory_] is not working - please fix!else:app=QApplication([directory_])fname=QFileDialog.getOpenFileNames(None,message,directory_,filter=filter,# kwargs: parent, message, directory, filter# but kw_names are different for different qt_bindings)ifisinstance(fname,tuple):return_value:str|list[str]=fname[0]else:return_value=str(fname)returnreturn_value
[docs]@needs_package("qt")defset_file_path_dialog(directory:str|None=None,message:str="Set a file path...",filter:str="All files (*)",)->str|list[str]:""" Set file path (path/name.suffix) in a ui dialog. Parameters ---------- directory directory path to start dialog in. If None the current directory is used. message Hint what to do filter filter for file type Returns ------- str new file path """ifdirectoryisNone:directory_="./"else:directory_=str(directory)ifQT_BINDING==QtBindings.PYSIDE2:app=(QApplication.instance())# this is needed if the function is called twice in a row.ifappisNone:app=QApplication([])# todo: [directory_] is not working - please fix!else:app=QApplication([directory_])fname=QFileDialog.getSaveFileName(None,message,directory_,filter=filter,# kwargs: parent, message, directory, filter# but kw_names are different for different qt_bindings)ifisinstance(fname,tuple):return_value:str|list[str]=fname[0]else:return_value=str(fname)returnreturn_value