Source code for crikit.ui.dialog_save

"""
CRIkit Save Dialog (crikit.ui.dialog_save)
=======================================================

Classes that present dialog boxes that retrieve options

DialogSave : Save Dialog

"""

# Append sys path
import sys as _sys
import os as _os
import datetime as _datetime

# Generic imports for QT-based programs
from PyQt5.QtWidgets import (QApplication as _QApplication,
                             QWidget as _QWidget, QDialog as _QDialog,
                             QMainWindow as _QMainWindow,
                             QSizePolicy as _QSizePolicy,
                             QFileDialog as _QFileDialog)
import PyQt5.QtCore as _QtCore

# Other imports
import numpy as _np

# Import from Designer-based GUI
from crikit.ui.qt_Save import Ui_Dialog

[docs]class DialogSave(_QDialog): """ DialogDarkOptions : Dark subtraction options dialog Methods -------- dialogSave : Used to call UI and retrieve results of dialog """ def __init__(self, current_filename=None, current_path=None, current_dataset_name=None, save_filename=None, save_path=None, save_dataset_name=None, suffix=None, parent=None): super(DialogSave, self).__init__(parent) ### EDIT ### self.ui = Ui_Dialog() ### EDIT ### self.ui.setupUi(self) ### EDIT ### self.ui.lineEditFilename.setFocus() # print('Current filename: {}'.format(current_filename)) if save_filename is not None and save_filename != '': self.filename = save_filename elif current_filename is not None and current_filename != '': self.filename = current_filename else: self.filename = None if save_path is not None and save_path != '': self.path = save_path elif current_path is not None and current_path != '': self.path = current_path else: self.path = None if save_dataset_name is not None and save_dataset_name != '': self.dataset_name = save_dataset_name elif current_dataset_name is not None and current_dataset_name != '': self.dataset_name = current_dataset_name else: self.dataset_name = None self.current_filename=current_filename self.current_path=current_path self.current_dataset_name=current_dataset_name self.save_filename=save_filename self.save_path=save_path self.save_dataset_name=save_dataset_name self.suffix = suffix self.ui.lineEditFilename.setText(self.filename) self.generateFilename() self.ui.lineEditPath.setText(self.path) self.ui.lineEditDataset.setText(self.dataset_name) self.ui.lineReadDataset.setText(self.dataset_name) self.generateDatasetName() self.ui.buttonCancel.pressed.connect(self.reject) self.ui.buttonOK.pressed.connect(self.accept) self.ui.lineEditFilename.editingFinished.connect(self.changeFilename) self.ui.lineEditPath.editingFinished.connect(self.changePath) self.ui.lineEditDataset.editingFinished.connect(self.changeDataset) self.ui.buttonGetFilename.pressed.connect(self.getFilename) self.ui.buttonGetPath.pressed.connect(self.getPath) self.ui.buttonGenerateFilename.pressed.connect(self.generateFilename) self.ui.buttonGenerateDatasetname.pressed.connect(self.generateDatasetName)
[docs] def changeFilename(self): self.filename = self.ui.lineEditFilename.text() self.filename = self.filename.split('.h5')[0] self.filename = self.filename + '.h5' self.ui.lineEditFilename.setText(self.filename) if self.path is None or self.path == '': self.ui.lineReadFileNamePath.setText('./' + self.filename) else: self.ui.lineReadFileNamePath.setText(self.path + self.filename)
[docs] def changePath(self): self.path = self.ui.lineEditPath.text() self.changeFilename()
[docs] def changeDataset(self): self.dataset_name = self.ui.lineEditDataset.text() self.ui.lineReadDataset.setText(self.dataset_name)
[docs] def getFilename(self): filename,_ = _QFileDialog.getSaveFileName(self, "Open H5 File", "./",\ "HDF5 Files (*.h5 *.hdf);;All Files (*.*)",options=_QFileDialog.Options(4)) if filename != '': self.path = _os.path.dirname(filename) + '/' self.filename = filename.split(_os.path.dirname(filename))[1][1::] self.ui.lineEditFilename.setText(self.filename) self.ui.lineReadFileNamePath.setText(self.path + self.filename) self.ui.lineEditPath.setText(self.path)
[docs] def getPath(self): path = _QFileDialog.getExistingDirectory(self) if path != '': self.path = path + '/' self.ui.lineEditPath.setText(self.path) self.changeFilename()
[docs] def generateFilename(self): curr_time = _datetime.datetime.now() rnd_fname = 'PROCESS_' + str(curr_time.year) + str(curr_time.month) + \ str(curr_time.day) + '_' + str(curr_time.hour) + '_' + \ str(curr_time.minute) + '_' + str(curr_time.second) + '_' + \ str(curr_time.microsecond) + '.h5' if self.filename is None or self.filename == '': self.filename = rnd_fname self.ui.lineEditFilename.setText(self.filename) else: self.filename = self.filename.split('.h5')[0] + '_' + rnd_fname self.ui.lineEditFilename.setText(self.filename) if self.path is None or self.path == '': self.ui.lineReadFileNamePath.setText('./' + self.filename) else: self.ui.lineReadFileNamePath.setText(self.path + self.filename)
[docs] def generateDatasetName(self): if self.save_dataset_name is not None: if self.suffix is not None: self.dataset_name = self.save_dataset_name + self.suffix else: curr_time = _datetime.datetime.now() self.dataset_name = self.save_dataset_name + '_' + str(curr_time.year) + str(curr_time.month) + \ str(curr_time.day) + '_' + str(curr_time.hour) + '_' + \ str(curr_time.minute) + '_' + str(curr_time.second) + '_' + \ str(curr_time.microsecond) elif self.current_dataset_name is not None: if self.suffix is not None: self.dataset_name = self.current_dataset_name + self.suffix else: curr_time = _datetime.datetime.now() self.dataset_name = self.current_dataset_name + '_PROCESS_' + str(curr_time.year) + str(curr_time.month) + \ str(curr_time.day) + '_' + str(curr_time.hour) + '_' + \ str(curr_time.minute) + '_' + str(curr_time.second) + '_' + \ str(curr_time.microsecond) else: if self.suffix is not None: self.dataset_name = 'PROCESS_' + self.suffix else: curr_time = _datetime.datetime.now() self.dataset_name = 'PROCESS_' + str(curr_time.year) + str(curr_time.month) + \ str(curr_time.day) + '_' + str(curr_time.hour) + '_' + \ str(curr_time.minute) + '_' + str(curr_time.second) + '_' + \ str(curr_time.microsecond) self.ui.lineEditDataset.setText(self.dataset_name) self.ui.lineReadDataset.setText(self.dataset_name)
[docs] @staticmethod def dialogSave(current_filename=None, current_path=None, current_dataset_name=None, save_filename=None, save_path=None, save_dataset_name=None, suffix=None, parent=None): """ Retrieve save dialog results Parameters ---------- current_filename : str Filename of HDF5 file from where current data resided current_path : str Path to HDF5 file from where current data resided current_dataset_name : str Dataset path and name where current data resided save_filename : str Filename of HDF5 file where previously saved (if so) save_path : str Path of HDF5 file where previously saved (if so) save_dataset_name : str Dataset path and name where previously saved (if so) suffix : str Suffix to append to _dataset_name based on processing steps NOTE : save* parameters supercede current* parameters Returns ---------- out : (tuple) Filename : str Path : str Dataset_name_path : str """ dialog = DialogSave(current_filename=current_filename, current_path=current_path, current_dataset_name=current_dataset_name, save_filename=save_filename, save_path=save_path, save_dataset_name=save_dataset_name, suffix=suffix, parent=parent) result = dialog.exec_() if result == 1: if dialog.filename is not None and dialog.path is not None and dialog.dataset_name is not None: return (dialog.filename, dialog.path, dialog.dataset_name) else: return None else: return None
if __name__ == '__main__': app = _QApplication(_sys.argv) app.setStyle('Cleanlooks') win = DialogSave.dialogSave() print(win) _sys.exit()