def export_plans(self): choose = ExportDialog(self.settings.batch_plans, PlanPreview) if not choose.exec_(): return dial = QFileDialog(self, "Export calculation plans") dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setDirectory( dial.setDirectory( self.settings.get("io.batch_plan_directory", str(Path.home())))) dial.setNameFilter("Calculation plans (*.json)") dial.setDefaultSuffix("json") dial.selectFile("calculation_plans.json") dial.setHistory(dial.history() + self.settings.get_path_history()) if dial.exec_(): file_path = str(dial.selectedFiles()[0]) self.settings.set("io.batch_plan_directory", os.path.dirname(file_path)) self.settings.add_path_history(os.path.dirname(file_path)) data = { x: self.settings.batch_plans[x] for x in choose.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self.settings.json_encoder_class, indent=2)
def export_measurement_profiles(self): exp = ExportDialog(self.settings.measurement_profiles, StringViewer) if not exp.exec_(): return dial = QFileDialog(self, "Export settings profiles") dial.setDirectory(self.settings.get("io.export_directory", "")) dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setNameFilter("measurement profile (*.json)") dial.setDefaultSuffix("json") dial.selectFile("measurements_profile.json") if dial.exec_(): file_path = str(dial.selectedFiles()[0]) self.settings.set("io.export_directory", file_path) data = { x: self.settings.measurement_profiles[x] for x in exp.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self.settings.json_encoder_class, indent=2) self.settings.set("io.save_directory", os.path.dirname(file_path))
def export_pipeline(self): exp = ExportDialog(self._settings.segmentation_pipelines, ProfileDictViewer) if not exp.exec_(): return dial = QFileDialog(self, "Export pipeline segment") dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setDirectory(self._settings.get("io.save_directory", "")) dial.setNameFilter("Segment pipeline (*.json)") dial.setDefaultSuffix("json") dial.selectFile("segment_pipeline.json") dial.setHistory(dial.history() + self._settings.get_path_history()) if dial.exec_(): file_path = dial.selectedFiles()[0] data = { x: self._settings.segmentation_pipelines[x] for x in exp.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self._settings.json_encoder_class, indent=2) self._settings.set("io.save_directory", os.path.dirname(file_path)) self._settings.add_path_history(os.path.dirname(file_path))
def open_save_records_dialog(self): from functools import partial logger, _ = self.current_logger_and_index() if not logger: return d = QFileDialog(self) d.selectFile(logger.name + '.log') d.setFileMode(QFileDialog.AnyFile) d.fileSelected.connect(partial(self.save_records, logger)) d.setWindowTitle('Save records of "{}" tab to...'.format(logger.name)) d.open()
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
def createEditor(self, parent: QWidget, option: QStyleOptionViewItem, index: QModelIndex) -> QWidget: view: ImagesTableView = option.widget model: ImagesTableModel = view.model() path: str = model.data(index, Qt.EditRole) path = Path(path) abspath = model.basepath / Image.images_dir / path dialog = QFileDialog(parent.window(), Qt.Dialog) dialog.setWindowModality(Qt.ApplicationModal) dialog.setMinimumWidth(800) dialog.setMinimumHeight(600) dialog.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.Dialog) dialog.setAcceptMode(QFileDialog.AcceptSave) dialog.setViewMode(QFileDialog.Detail) dialog.setDirectory(str(abspath.parent)) dialog.selectFile(str(abspath.name)) dialog.setLabelText(QFileDialog.LookIn, "Rename image file") return dialog