def pick_output_dir(self): ''' Sets the output directory. ''' dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setOption(QFileDialog.ShowDirsOnly) dialog.setWindowTitle('Select a location to store the generated minidsp config files') if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: if os.path.abspath(selected[0]) == os.path.abspath(self.__beq_dir): QMessageBox.critical(self, '', f"Output directory cannot be inside the input directory, choose a different folder", QMessageBox.Ok) else: abspath = os.path.abspath(f"{selected[0]}{os.path.sep}beq_minidsp") if not os.path.exists(abspath): try: os.mkdir(abspath) except: QMessageBox.critical(self, '', f"Unable to create directory - {abspath}", QMessageBox.Ok) if os.path.exists(abspath): self.outputDirectory.setText(abspath) self.__enable_process()
def select_file(self): dial = QFileDialog() dial.setFileMode(QFileDialog.ExistingFile) dial.setAcceptMode(QFileDialog.AcceptOpen) if dial.exec(): self.first_text.setText(dial.selectedFiles()[0])
def showDefaultOutputDirectoryPicker(self): dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setWindowTitle(f"Select Extract Audio Output Directory") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: self.defaultOutputDirectory.setText(selected[0])
def __select_dir(self): dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setWindowTitle('Select Directory') if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: return selected[0] return ''
def selectFile(self): self.__reinit_fields() dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.ExistingFile) dialog.setWindowTitle('Select Audio or Video File') if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: self.inputFile.setText(selected[0]) self.__probe_file()
def showBeqDirectoryPicker(self): ''' selects an output directory for the beq files ''' dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setWindowTitle(f"Select BEQ Files Download Directory") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: self.beqFiltersDir.setText(selected[0]) self.__count_beq_files()
def __get_directory(self, name): dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.ExistingFile) dialog.setNameFilter(f"{name} ({name}.exe {name})") dialog.setWindowTitle(f"Select {name}") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: return selected[0] return None
def showExtractCompleteSoundPicker(self): dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.ExistingFile) dialog.setNameFilter("Audio (*.wav)") dialog.setWindowTitle(f"Select Notification Sound") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: self.extractCompleteAudioFile.setText(selected[0]) else: self.extractCompleteAudioFile.setText('') else: self.extractCompleteAudioFile.setText('')
def setTargetDirectory(self): ''' Sets the target directory based on the user selection. ''' dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setWindowTitle(f"Select Output Directory") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: self.targetDir.setText(selected[0]) if self.__executor is not None: self.__executor.target_dir = selected[0] self.__display_command_info()
def parse_file(filter, title, parsers): ''' Presents a file dialog to the user so they can choose something to load. :return: a 2 entry tuple with the file name and loaded thing (if anything was loaded) ''' dialog = QFileDialog() dialog.setFileMode(QFileDialog.ExistingFile) dialog.setNameFilter(filter) dialog.setWindowTitle(title) if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: file_name = selected[0] for k, v in parsers.items(): if file_name.endswith(k): return v(file_name) return None, None
def open_exe_name_dialog(parent, appname): options = QFileDialog.Options() options |= QDir.AllEntries options |= QDir.Hidden file_dialog = QFileDialog() file_dialog.setFilter(QDir.AllEntries | QDir.Hidden) file_dialog.setFileMode(QFileDialog.ExistingFile) file_dialog.setWindowTitle( f"{appname} could not be found. Please locate in" "manually") if file_dialog.exec(): file_name = file_dialog.selectedFiles() print(file_name[0]) return file_name[0] else: print("No file is selected. guiscrcpy is likely to fail")
def pick_user_source_dir(self): ''' Sets the user source directory. ''' dialog = QFileDialog(parent=self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setOption(QFileDialog.ShowDirsOnly) dialog.setWindowTitle('Choose a directory which holds your own BEQ files') if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: if os.path.abspath(selected[0]) == os.path.abspath(self.__beq_dir): QMessageBox.critical(self, '', f"User directory cannot be inside the input directory, choose a different folder", QMessageBox.Ok) else: self.userSourceDir.setText(selected[0]) self.update_beq_count()
def load_filter(parent, status_bar=None): ''' Presents a file dialog to the user so they can choose a filter to load. :return: the loaded filter, if any. ''' dialog = QFileDialog(parent=parent) dialog.setFileMode(QFileDialog.ExistingFile) dialog.setNameFilter(f"*.filter") dialog.setWindowTitle(f"Load Filter") if dialog.exec(): selected = dialog.selectedFiles() if len(selected) > 0: with open(selected[0], 'r') as infile: input = json.load(infile) if status_bar is not None: status_bar.showMessage(f"Loaded filter from {infile.name}") return input return None
class FileLineEdit(QLineEdit): def __init__(self, check_exists: bool = False, parent: Optional[QWidget] = None): super(FileLineEdit, self).__init__(parent) browse_action_icon = self.window().style().standardIcon( QStyle.SP_DirOpenIcon) self._browse_action = self.addAction(browse_action_icon, QLineEdit.LeadingPosition) self._file_dialog = QFileDialog(self) self._file_dialog.setOption(QFileDialog.DontUseNativeDialog) # noinspection PyUnusedLocal # noinspection PyUnresolvedReferences @self._browse_action.triggered.connect def on_browse_action_triggered(checked=False): path = self.path if path is not None: if path.parent.is_dir(): self._file_dialog.setDirectory(str(path.parent)) if path.exists(): self._file_dialog.selectFile(str(path)) if self._file_dialog.exec() == QFileDialog.Accepted: selected_files = self._file_dialog.selectedFiles() self.setText(selected_files[0]) if check_exists: # noinspection PyUnresolvedReferences @self.textChanged.connect def on_text_changed(text): if not text or Path(text).exists(): self.setStyleSheet('') else: self.setStyleSheet('background-color: #88ff0000') @property def file_dialog(self) -> QFileDialog: return self._file_dialog @property def path(self) -> Optional[Path]: return Path(self.text()) if self.text() else None
class LoadMeasurementsDialog(QDialog, Ui_loadMeasurementDialog): ''' Load Measurement dialog ''' def __init__(self, parent=None): super(LoadMeasurementsDialog, self).__init__(parent) self.setupUi(self) self.buttonBox.button(QDialogButtonBox.Open).setText("Select File(s)") _translate = QtCore.QCoreApplication.translate self.fs.setCurrentText(_translate("loadMeasurementDialog", "48000")) self.__dialog = QFileDialog(parent=self) self.__errors = 0 def accept(self): ''' Shows the file select dialog based on the chosen options. :return: ''' self.__errors = 0 self.loadedFiles.clear() self.ignoredFiles.clear() loadType = self.fileType.currentText() fileMode = None option = QFileDialog.ShowDirsOnly if loadType == 'txt' or loadType == 'dbl': fileMode = QFileDialog.DirectoryOnly elif loadType == 'wav': fileMode = QFileDialog.DirectoryOnly elif loadType == 'HolmImpulse': fileMode = QFileDialog.ExistingFile option = QFileDialog.DontConfirmOverwrite elif loadType == 'REW': fileMode = QFileDialog.DirectoryOnly elif loadType == 'ARTA': fileMode = QFileDialog.DirectoryOnly else: QMessageBox.about(self, "Error", "Unknown format " + loadType) if fileMode is not None: self.__dialog.setFileMode(fileMode) self.__dialog.setOption(option) self.__dialog.setWindowTitle("Load Measurements") self.__dialog.exec() def load(self, measurementModel, dataPathField): ''' Loads the measurements by looking in the selected directory. :param measurementModel: the model to load. :param dataPathField: the display field. :return: ''' selected = self.__dialog.selectedFiles() loadType = self.fileType.currentText() if len(selected) > 0: dataPathField.setText(selected[0]) if loadType == 'txt': measurementModel.load( TxtLoader(self.onFile, selected[0], int(self.fs.currentText())).load()) elif loadType == 'dbl': measurementModel.load( DblLoader(self.onFile, selected[0], int(self.fs.currentText())).load()) elif loadType == 'wav': measurementModel.load( WavLoader(self.onFile, selected[0]).load()) elif loadType == 'HolmImpulse': measurementModel.load( HolmLoader(self.onFile, selected[0]).load()) elif loadType == 'REW': measurementModel.load( REWLoader(self.onFile, selected[0]).load()) elif loadType == 'ARTA': measurementModel.load( ARTALoader(self.onFile, selected[0]).load()) else: measurementModel.clear() dataPathField.setText('') if self.__errors == 0: QDialog.accept(self) def onFile(self, filename, loaded): if loaded is True: self.loadedFiles.appendPlainText(filename) else: self.ignoredFiles.appendPlainText(filename) self.__errors += 1 def fileTypeChanged(self, text): ''' Hides the fs field if the fs is determined by the source file. :param text: the selected text. ''' visible = True if text == 'txt' or text == 'dbl': pass else: visible = False self.fs.setVisible(visible) self.fsLabel.setVisible(visible)