def open_dialog(self): global path if path == '': path = "/home/anatoly/Documents" filedialog = QFileDialog(self, 'Open File', directory = path, filter ="text (*.txt *.csv *.dat)", options = QFileDialog.DontUseNativeDialog) # use QFileDialog.DontUseNativeDialog to change directory filedialog.setStyleSheet("QWidget { background-color : rgb(136, 138, 133) }") # change background color of the open file window filedialog.setFileMode(QtGui.QFileDialog.AnyFile) filedialog.fileSelected.connect(self.file_open) filedialog.show()
def save_dialog(self): global path, s s = 1; if path == '': path = "/home/anatoly/Documents" filedialog = QFileDialog(self, 'Enter File Name', directory = path, options = QFileDialog.DontUseNativeDialog) # use QFileDialog.DontUseNativeDialog to change directory filedialog.setStyleSheet("QWidget { background-color : rgb(136, 138, 133) }") # change background color of the open file window filedialog.setAcceptMode(QtGui.QFileDialog.AcceptSave) filedialog.fileSelected.connect(self.file_save) filedialog.show()
def save_dialog(self): global path, s s = 1 # for checking whether the data was saved before the start button is pressed if path == '': path = "/home/anatoly/Documents" filedialog = QFileDialog( self, 'Enter File Name', directory=path, options=QFileDialog.DontUseNativeDialog ) # use QFileDialog.DontUseNativeDialog to change directory filedialog.setStyleSheet( "QWidget { background-color : rgb(136, 138, 133) }" ) # change background color of the open file window filedialog.setAcceptMode(QtGui.QFileDialog.AcceptSave) filedialog.fileSelected.connect( self.file_save ) # connect to action; send filename to fumction file_save filedialog.show()
class Saver_Opener(): def __init__(self): pass def open_1D(self, path, header=0): header_array = [] file_to_read = open(str(path), 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(str(path), dtype=float, delimiter=',') data = np.transpose(temp) return header_array, data def open_1D_dialog(self, directory='', fmt='', header=0): self.app = QtWidgets.QApplication([]) file_path = self.FileDialog(directory=directory, mode='Open', fmt='csv, txt, dat') QTimer.singleShot(100, self.app.quit) self.app.exec_() header_array = [] file_to_read = open(file_path, 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(file_path, dtype=float, delimiter=',') data = np.transpose(temp) return header_array, data def save_1D_dialog(self, data, directory='', fmt='', header=''): self.app = QtWidgets.QApplication(sys.argv) file_path = self.FileDialog(directory=directory, mode='Save', fmt='csv, txt, dat') QTimer.singleShot(50, self.app.quit) self.app.exec_() np.savetxt(file_path, np.transpose(data), fmt='%.10f', delimiter=',', newline='\n', header=header, footer='', comments='#', encoding=None) def open_2D(self, path, header=0): header_array = [] file_to_read = open(str(path), 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(str(path), dtype=float, delimiter=',') data = temp return header_array, data def open_2D_dialog(self, directory='', fmt='', header=0): self.app = QtWidgets.QApplication(sys.argv) file_path = self.FileDialog(directory=directory, mode='Open', fmt='csv, txt, dat') QTimer.singleShot(50, self.app.quit) self.app.exec_() header_array = [] file_to_read = open(file_path, 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(file_path, dtype=float, delimiter=',') data = temp return header_array, data def open_2D_appended(self, path, header=0, chunk_size=1): header_array = [] file_to_read = open(str(path), 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(str(path), dtype=float, delimiter=',') data = np.array_split(temp, chunk_size) return header_array, data def open_2D_appended_dialog(self, directory='', header=0, chunk_size=1): self.app = QtWidgets.QApplication(sys.argv) file_path = self.FileDialog(directory=directory, mode='Open', fmt='csv, txt, dat') QTimer.singleShot(50, self.app.quit) self.app.exec_() header_array = [] file_to_read = open(file_path, 'r') for i, line in enumerate(file_to_read): if i is header: break temp = line.split(":") header_array.append(temp) file_to_read.close() temp = np.genfromtxt(file_path, dtype=float, delimiter=',') data = np.array_split(temp, chunk_size) return header_array, data def save_2D_dialog(self, data, directory='', header=''): self.app = QtWidgets.QApplication(sys.argv) file_path = self.FileDialog(directory=directory, mode='Save', fmt='csv, txt, dat') QTimer.singleShot(50, self.app.quit) self.app.exec_() np.savetxt(file_path, data, fmt='%.10f', delimiter=',', newline='\n', header=header, footer='', comments='#', encoding=None) def create_file_dialog(self, directory=''): self.app = QtWidgets.QApplication(sys.argv) file_path = self.FileDialog(directory=directory, mode='Save', fmt='csv, txt, dat') open(file_path, "w").close() QTimer.singleShot(50, self.app.quit) self.app.exec_( ) # run mainloop which runs all time and makes all job in GUI. # mainloop will close the dialog, but we will have problems closing loop # we use QTimer with app.quit to inform mainloop to execute # it after it will be started. return file_path def FileDialog(self, directory='', mode='Open', fmt=''): self.dialog = QFileDialog() self.dialog.setStyleSheet( "QWidget { background-color : rgb(136, 138, 133) }") self.dialog.setFileMode(QtWidgets.QFileDialog.AnyFile) # both open and save dialog self.dialog.setAcceptMode(QFileDialog.AcceptOpen)\ if mode=='Open' else self.dialog.setAcceptMode(QFileDialog.AcceptSave) # set format if fmt != '': self.dialog.setDefaultSuffix(fmt) self.dialog.setNameFilters([f'{fmt} (*.{fmt})']) # set starting directory if directory != '': self.dialog.setDirectory(str(directory)) else: pass if self.dialog.exec_() == QDialog.Accepted: path = self.dialog.selectedFiles()[0] # returns a list return path else: return ''
def save_file(self): if not self.save_on: return dialog = QFileDialog() dialog.setStyleSheet("background-color:rgb(255, 255, 255)") save_name, name_tmp = dialog.getSaveFileName( self, 'Save File', None, "*.txt (*.txt);;" + "*dat (*.dat)") if not save_name: return False name = str(save_name) if not (name.endswith('.txt') or name.endswith('.dat')): name += '.txt' filetyp = '.txt' if '.txt' in name: pos = name.index('.txt') filetyp = '.txt' name = name[0:pos] elif '.dat' in name: pos = name.index('.dat') filetyp = '.dat' name = name[0:pos] strTT = '_Time_trace' strFT = '_Fourier_transform' strDD = '_Distance_distribution' strBG = '_Backgound_Function' strinfo = '_Information_sheet' # File 1 (time trace) tmparra = np.array(np.transpose((self.time, self.spc_bg_n))) y = tmparra.reshape((len(self.time), 2)) with open(name + strTT + filetyp, 'w') as file: file.write("\n".join(" ".join(map("{:.8f}".format, x)) for x in (y))) file.close() # File 2 (fourier transform of the time trace) tmparra = np.array(np.transpose((self.Frequency_region, self.Fourier))) y = tmparra.reshape((len(self.Frequency_region), 2)) with open(name + strFT + filetyp, 'w') as file: file.write("\n".join(" ".join(map("{:.8f}".format, x)) for x in (y))) file.close() # File 3 (distance distribution) if not self.userdef: tmparra = np.array(np.transpose((self.r, self.Pr))) y = tmparra.reshape((len(self.r), 2)) else: tmparra = np.array(np.transpose((self.r_usr, self.Pr_usr))) y = tmparra.reshape((len(self.r_usr), 2)) with open(name + strDD + filetyp, 'w') as file: file.write("\n".join(" ".join(map("{:.8f}".format, x)) for x in (y))) file.close() # File 4 (background function of the time signal) tmparra = np.array(np.transpose((self.time_bg, self.bg_function))) y = tmparra.reshape((len(self.time_bg), 2)) with open(name + strBG + filetyp, 'w') as file: file.write("\n".join(" ".join(map("{:.8f}".format, x)) for x in (y))) file.close() # File 5 (information file which contains all simulation settings) with open(name + strinfo + filetyp, 'w') as file: file.write("Infosheet for PELDOR/DEER Simulation." + " Original Path:\n" + name + "\n\n") file.write("Simulated with SimPel" + self.versionnumber + "\n\n") file.write("Analyzed at: ") now = datetime.datetime.now() file.write(now.strftime("%Y-%m-%d %H:%M:%S")) file.write("\n\n\n*************Simulation Parameter***********" + "******\n\n") if not self.userdef: file.write("Distance / nm \t Coefficient\t sigma / nm\n") for i in range(0, len(self.sigmas)): value = str("%.4f" % self.inputvalues_static[2 * i]) file.write(value + "\t ") value = str("%.4f" % self.inputvalues_static[2 * i + 1]) file.write(value + "\t ") value = str("%.4f" % self.sigmas_static[i]) file.write(value + "\t ") file.write("\n") else: file.write("Distance distribution were taken from" + "external file: ") file.write(str(self.filename)) file.write("\n") boolstr = str(self.EnableNoiseButton.isChecked()) file.write("\n\nPELDOR/DEER step size: " + str(self.stepsize_static) + ' ns') file.write("\n\nPELDOR/DEER time scale: " + str(self.timescale_static) + ' ns') file.write("\n\nPELDOR/DEER modulation depth: " + str(self.moddepth_static[0])) file.write("\n\nGaussian noise enabled: " + boolstr) if self.EnableNoiseButton.isChecked(): SNRvalue = str("%.3f" % self.SNRratio) file.write("\n\nSignal-to-noise ratio: " + SNRvalue) boolstr = str(self.EnableBgButton.isChecked()) file.write("\n\nBackground function enabled: " + boolstr) if self.EnableBgButton.isChecked(): file.write("\n\nBackground dimension: " + str(self.bg_dim)) file.write("\n\nBackground decay: " + str(self.bg_decay[0]) + "*1e-4 1/ns") if not self.userdef: if self.integrator_static == 3: intstr = 'Fresnel integrals' elif not self.userdef: intstr = 'Fresnel integrals' elif self.integrator_static == 0: intstr = 'Fresnel integrals' elif self.integrator_static == 2: intstr = 'Fresnel integrals with high discretization rate' else: intstr = 'Kernel matrix with Fresnel integral evaluation' file.write("\n\nIntegration method: " + intstr) file.close() figsize1 = self.figure.get_size_inches() figsize2 = self.figure2.get_size_inches() try: if eval(self.configs_str["autosave"]): k = str(self.configs_str["figure_format"]) s = k.split(",") for i in range(0, len(s)): for tick in self.ax.xaxis.get_major_ticks(): tick.label.set_fontsize( self.configs["axeslabelfontsize"]) for tick in self.ax.yaxis.get_major_ticks(): tick.label.set_fontsize( self.configs["axeslabelfontsize"]) for tick in self.ax2.xaxis.get_major_ticks(): tick.label.set_fontsize( self.configs["axeslabelfontsize"]) for tick in self.ax2.yaxis.get_major_ticks(): tick.label.set_fontsize( self.configs["axeslabelfontsize"]) self.ax.xaxis.get_label().set_fontsize( self.configs["fontsize"]) self.ax2.xaxis.get_label().set_fontsize( self.configs["fontsize"]) self.ax.yaxis.get_label().set_fontsize( self.configs["fontsize"]) self.ax2.yaxis.get_label().set_fontsize( self.configs["fontsize"]) self.figure.set_size_inches(self.configs["xsize"], self.configs["ysize"], forward=True) self.figure2.set_size_inches(self.configs["xsize"], self.configs["ysize"], forward=True) self.figure.tight_layout() self.figure2.tight_layout() s[i] = str(s[i]).rstrip() s[i] = s[i].replace(" ", "") self.figure.savefig(name + strTT + "." + str(s[i]), bbox_inches='tight', papertype='a4', format=s[i]) self.figure2.savefig(name + strDD + "." + str(s[i]), bbox_inches='tight', papertype='a4', format=s[i]) self.figure.set_size_inches(figsize1, forward=True) self.figure2.set_size_inches(figsize2, forward=True) self.plot_TT() self.plot_DD() except: self.figure.set_size_inches(figsize1, forward=True) self.figure2.set_size_inches(figsize2, forward=True) self.plot_TT() self.plot_DD() str_tm = ("Something went wrong! Figures could not be saved." + "\nMaybe wrong configuration settings.") self.War5 = QMessageBox.warning(self, "Error", str_tm, QMessageBox.Ok)