def __init__(self, parent: MainWindowBase): super(_LinkLengthDialog, self).__init__(parent) self.setWindowTitle("Set Link Length") self.main_layout = QVBoxLayout(self) layout = QHBoxLayout() self.leader = QComboBox(self) self.follower = QComboBox(self) self.length = QDoubleSpinBox(self) layout.addWidget(self.leader) layout.addWidget(self.follower) layout.addWidget(self.length) self.main_layout.addLayout(layout) self.vpoints = parent.vpoint_list self.vlinks = { vlink.name: frozenset(vlink.points) for vlink in parent.vlink_list } self.leader.currentTextChanged.connect(self.__set_follower) self.follower.currentTextChanged.connect(self.__set_length) self.leader.addItems([f"P{i}" for i in range(len(self.vpoints))]) self.leader.setCurrentIndex(0) self.length.setMaximum(100000) button_box = QDialogButtonBox(self) button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) button_box.button(QDialogButtonBox.Ok).setEnabled( bool(parent.vpoint_list)) self.main_layout.addWidget(button_box)
class UiUnitChangeDialog(QDialog): def __init__(self, parent=None): super(UiUnitChangeDialog, self).__init__(parent) # Dialog settings self.setWindowTitle("Change Plot Units") self.layout_vertical = QVBoxLayout(self) self.form_layout = QFormLayout() self.layout_vertical.addLayout(self.form_layout) # Flux unit self.label_flux_unit = QLabel(self) self.line_edit_flux_unit = QLineEdit(self) self.label_flux_unit.setText("Flux Unit") self.form_layout.addRow(self.label_flux_unit, self.line_edit_flux_unit) # Dispersion unit self.label_disp_unit = QLabel(self) self.line_edit_disp_unit = QLineEdit(self) self.label_disp_unit.setText("Dispersion Unit") self.form_layout.addRow(self.label_disp_unit, self.line_edit_disp_unit) self.button_box = QDialogButtonBox(self) self.button_box.setOrientation(Qt.Horizontal) self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.layout_vertical.addWidget(self.button_box) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject)
class InputValueDialog(QDialog): UP = -1 DOWN = 1 signal_move_cursor = Signal(int) signal_edit_finished = Signal(str) def __init__(self, parent): super(InputValueDialog, self).__init__(parent) self.setLayout(QVBoxLayout()) self.edit = QLineEdit() self.layout().addWidget(self.edit) self.edit.returnPressed.connect(self.edit_finished) self.button_box = QDialogButtonBox() self.button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.layout().addWidget(self.button_box) self.button_box.rejected.connect(self.close) self.button_box.accepted.connect(self.edit_finished) def edit_finished(self): self.close() self.signal_edit_finished.emit(self.edit.text()) def keyPressEvent(self, e: QKeyEvent): if e.key() == Qt.Key_Up: self.close() self.signal_move_cursor.emit(self.UP) e.accept() elif e.key() == Qt.Key_Down: self.close() self.signal_move_cursor.emit(self.DOWN) e.accept() super(InputValueDialog, self).keyPressEvent(e)
class UiLayerArithmeticDialog(QDialog): def __init__(self, parent=None): super(UiLayerArithmeticDialog, self).__init__(parent) # Dialog settings self.setWindowTitle("Layer Arithmetic") self.resize(354, 134) self.layout_vertical = QVBoxLayout(self) # Arithmetic group box self.group_box_arithmetic = QGroupBox(self) self.group_box_arithmetic.setTitle("Formula") self.line_edit_formula = QLineEdit(self.group_box_arithmetic) self.layout_horizontal = QHBoxLayout(self.group_box_arithmetic) self.layout_horizontal.addWidget(self.line_edit_formula) self.layout_vertical.addWidget(self.group_box_arithmetic) # Buttons self.button_box = QDialogButtonBox(self) self.button_box.setOrientation(Qt.Horizontal) self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject) self.layout_vertical.addWidget(self.button_box)
class UiSmoothingDialog(QDialog): """ Initialize all the TopAxisDialog Qt UI elements. """ def __init__(self, *args, **kwargs): super(UiSmoothingDialog, self).__init__(*args, **kwargs) size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) self.setSizePolicy(size_policy) # Dialog settings self.setWindowTitle("Smoothing Dialog") self.layout_vertical = QVBoxLayout(self) self.layout_horizontal = QHBoxLayout() self.layout_vertical.addLayout(self.layout_horizontal) # Define header selectors self.label_axis_mode = QLabel(self) self.combo_box_kernel = QComboBox(self) self.label_axis_mode.setText("Kernel") self.layout_horizontal.addWidget(self.label_axis_mode) self.layout_horizontal.addWidget(self.combo_box_kernel) self.layout_horizontal.setStretch(1, 1) # Define velocity self.group_box = QGroupBox(self) self.label_stddev = QLabel(self.group_box) self.line_edit_stddev = QLineEdit(self.group_box) self.group_box.setTitle("Parameters") self.label_stddev.setText("Standard Deviation") self.layout_horizontal_2 = QHBoxLayout(self.group_box) self.layout_horizontal_2.addWidget(self.label_stddev) self.layout_horizontal_2.addWidget(self.line_edit_stddev) self.layout_vertical.addWidget(self.group_box) # Add a spacer self.layout_vertical.addStretch(1) # Buttons self.button_box = QDialogButtonBox(self) self.button_box.setOrientation(Qt.Horizontal) self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.button_box.setObjectName("buttonBox") self.layout_vertical.addWidget(self.button_box) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject)
class NewModelDialog(QDialog): def __init__(self, parent=None): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setWindowTitle('Create New Model') self.treeview = parent self.setAttribute(Qt.WA_DeleteOnClose) namelabel = QLabel(_("Model Name")) self.nameEdit = QLineEdit(self) self.importWidget = ImportAsWidget(self, self.nameEdit) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addWidget(namelabel, 0, 0) mainLayout.addWidget(self.nameEdit, 0, 1) mainLayout.addWidget(self.importWidget, 1, 0, 1, 2) mainLayout.addWidget(self.buttonBox, 2, 0, 1, 2) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'name': self.nameEdit.text(), 'define_var': self.importWidget.shouldImport.isChecked(), 'varname': self.importWidget.nameEdit.text() } if reply['define_var']: varname = reply['varname'] if not check_varname(varname): QMessageBox.critical( self, 'Error', 'Invalid variable name: %s' % varname ) return self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = {'accepted': False} super().reject()
def __init__(self, parent: MainWindowBase): super(_ScaleDialog, self).__init__(parent) self.setWindowTitle("Scale Mechanism") self.main_layout = QVBoxLayout(self) self.enlarge = QDoubleSpinBox(self) self.shrink = QDoubleSpinBox(self) self.__add_option("Enlarge", self.enlarge) self.__add_option("Shrink", self.shrink) button_box = QDialogButtonBox(self) button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) button_box.button(QDialogButtonBox.Ok).setEnabled( bool(parent.vpoint_list)) self.main_layout.addWidget(button_box)
class ImportNamesDialog(QDialog): def __init__(self, parent=None): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setWindowTitle('Import Names') self.treeview = parent self.setAttribute(Qt.WA_DeleteOnClose) self.importSelected = QCheckBox(_("Import selected"), self) self.importSelected.setCheckState(Qt.Checked) self.importChildren = QCheckBox(_("Import children"), self) self.importChildren.setCheckState(Qt.Checked) self.replaceExisting = QCheckBox(_("Replace existing names"), self) self.replaceExisting.setCheckState(Qt.Checked) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addWidget(self.importSelected) mainLayout.addWidget(self.importChildren) mainLayout.addWidget(self.replaceExisting) mainLayout.addWidget(self.buttonBox) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'import_selected': self.importSelected.isChecked(), 'import_children': self.importChildren.isChecked(), 'replace_existing': self.replaceExisting.isChecked() } self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = {'accepted': False} super().reject()
def __init__(self, parent, init_val): super(EditVal_Dialog, self).__init__(parent) # shortcut save_shortcut = QShortcut(QKeySequence.Save, self) save_shortcut.activated.connect(self.save_triggered) main_layout = QVBoxLayout() self.val_text_edit = QPlainTextEdit() val_str = '' try: val_str = str(init_val) except Exception as e: msg_box = QMessageBox(QMessageBox.Warning, 'Value parsing failed', 'Couldn\'t stringify value', QMessageBox.Ok, self) msg_box.setDefaultButton(QMessageBox.Ok) msg_box.exec_() self.reject() self.val_text_edit.setPlainText(val_str) main_layout.addWidget(self.val_text_edit) button_box = QDialogButtonBox() button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) main_layout.addWidget(button_box) self.setLayout(main_layout) self.resize(450, 300) self.setWindowTitle('edit val')
class UiTopAxisDialog(QDialog): """ Initialize all the TopAxisDialog Qt UI elements. """ def __init__(self, *args, **kwargs): super(UiTopAxisDialog, self).__init__(*args, **kwargs) self.setObjectName("Top Axis Dialog") size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) self.setSizePolicy(size_policy) # Dialog settings self.setWindowTitle("Axis Settings") self.layout_vertical = QVBoxLayout(self) self.layout_horizontal = QHBoxLayout() self.layout_vertical.addLayout(self.layout_horizontal) # Define header selectors self.label_axis_mode = QLabel(self) self.combo_box_axis_mode = QComboBox(self) self.label_axis_mode.setText("Axis mode") self.layout_horizontal.addWidget(self.label_axis_mode) self.layout_horizontal.addWidget(self.combo_box_axis_mode) # Define velocity self.group_box_velocity = QGroupBox(self) self.label_reference_wavelength = QLabel(self.group_box_velocity) self.line_edit_reference_wavelength = QLineEdit( self.group_box_velocity) self.group_box_velocity.setTitle("Velocity parameters") self.label_reference_wavelength.setText("Reference wavelength") self.layout_horizontal_2 = QHBoxLayout(self.group_box_velocity) self.layout_horizontal_2.addWidget(self.label_reference_wavelength) self.layout_horizontal_2.addWidget(self.line_edit_reference_wavelength) self.layout_vertical.addWidget(self.group_box_velocity) # Define redshift self.group_box_redshift = QGroupBox(self) self.label_redshift = QLabel(self.group_box_redshift) self.line_edit_redshift = QLineEdit(self.group_box_redshift) self.group_box_redshift.setTitle("Redshift parameters") self.label_redshift.setText("Amount") self.layout_horizontal_3 = QHBoxLayout(self.group_box_redshift) self.layout_horizontal_3.addWidget(self.label_redshift) self.layout_horizontal_3.addWidget(self.line_edit_redshift) self.layout_vertical.addWidget(self.group_box_redshift) # Add a spacer self.layout_vertical.addStretch(1) # Buttons self.button_box = QDialogButtonBox(self) self.button_box.setOrientation(Qt.Horizontal) self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.button_box.setObjectName("buttonBox") self.layout_vertical.addWidget(self.button_box) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject)
class FramesWidget(BaseFrame): rejected = Signal() accepted = Signal() back = Signal() def __init__(self, parent=None): super(FramesWidget, self).__init__(parent) self.config_frames = [] self.frames_instances = [] self.current_frame = 0 self.widget_layout = QVBoxLayout(self) self.setLayout(self.widget_layout) self.frames_widget = QWidget(self) self.frames_widget.setContentsMargins(0, 0, 0, 0) self.frames_widget_layout = QGridLayout(self.frames_widget) self.frames_widget_layout.setContentsMargins(0, 0, 0, 0) self.widget_layout.addWidget(self.frames_widget) self.btn_box = QDialogButtonBox(self) self.btn_box.setObjectName("btn_box") self.btn_box.setStandardButtons(QDialogButtonBox.Reset | QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.btn_box.button(QDialogButtonBox.Reset).setText("Back") self.btn_box.button(QDialogButtonBox.Ok).setText("Next") self.widget_layout.addWidget(self.btn_box) self.btn_box.button(QDialogButtonBox.Reset).clicked.connect( self.on_btn_box_resetted) QMetaObject.connectSlotsByName(self) def add_frames(self, frames): for frame in frames: self.add_frame(frame) def add_frame(self, frame): f = frame(self.frames_widget) f.setVisible(False) f.set_next_enabled.connect( self.btn_box.button(QDialogButtonBox.Ok).setEnabled) self.frames_widget_layout.addWidget(f, 0, 0, 1, 1) self.frames_instances.append(f) if len(self.frames_instances) > 0: self.frames_instances[0].setVisible(True) if self.frames_instances[0].disable_next_on_enter: self.btn_box.button(QDialogButtonBox.Ok).setEnabled(False) @Slot(dict) def set_options(self, options): for frame in self.frames_instances: frame.set_options(options) @Slot() def collect_info(self) -> dict: """Get info from every page""" settings = {} for frame in self.frames_instances: settings = settings | frame.collect_info() return settings @Slot() def on_btn_box_rejected(self): """When user clicks cancel button""" self.rejected.emit() @Slot() def on_btn_box_accepted(self): """On Next button clicked""" if self.current_frame + 1 < len(self.frames_instances): # if not last self.frames_instances[self.current_frame].setVisible(False) self.current_frame = self.current_frame + 1 self.frames_instances[self.current_frame].setVisible(True) # if disable on enter page self.btn_box.button( QDialogButtonBox.Ok).setEnabled(not self.frames_instances[ self.current_frame].disable_next_on_enter) # if next page is last self._change_next_finish() # if last page elif self.current_frame + 1 == len(self.frames_instances): self.accepted.emit() @Slot() def on_btn_box_resetted(self): """On Back button clicked.""" if self.current_frame > 0: self.frames_instances[self.current_frame].setVisible(False) self.current_frame = self.current_frame - 1 self.frames_instances[self.current_frame].setVisible(True) self._change_next_finish() self.btn_box.button( QDialogButtonBox.Ok).setEnabled(not self.frames_instances[ self.current_frame].disable_next_on_enter) else: self.back.emit() def _change_next_finish(self): if self.current_frame + 1 == len(self.frames_instances): self.btn_box.button(QDialogButtonBox.Ok).setText("Finish") else: self.btn_box.button(QDialogButtonBox.Ok).setText("Next")
class NewCellsDialog(QDialog): def __init__(self, parent=None, parentList=(), currIndex=0): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle('Create New Cells') self.treeview = parent parentLabel = QLabel(_("Parent")) self.parentBox = QComboBox(self) self.parentBox.addItems(parentList) self.parentBox.setCurrentIndex(currIndex) nameLabel = QLabel(_("Cells Name")) self.nameEdit = QLineEdit(self) self.importWidget = ImportAsWidget(self, self.nameEdit) self.formulaPane = BaseCodePane(parent, title='Formula') self.formulaPane.editor.setReadOnly(False) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addWidget(parentLabel, 0, 0) mainLayout.addWidget(self.parentBox, 0, 1) mainLayout.addWidget(nameLabel, 1, 0) mainLayout.addWidget(self.nameEdit, 1, 1) mainLayout.addWidget(self.importWidget, 2, 0, 1, 2) mainLayout.addWidget(self.formulaPane, 3, 0, 1, 2) mainLayout.addWidget(self.buttonBox, 4, 0, 1, 2) mainLayout.setRowStretch(3, 1) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'name': self.nameEdit.text(), 'parent': self.parentBox.currentText(), 'formula': self.formulaPane.editor.toPlainText(), 'define_var': self.importWidget.shouldImport.isChecked(), 'varname': self.importWidget.nameEdit.text() } varname = reply['varname'] if not check_varname(varname): QMessageBox.critical( self, 'Error', 'Invalid variable name: %s' % varname ) return self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = { 'accepted': False } super().reject()
class SelectFromListDialog(QDialog): """Dialog box for selecting multiple items. The original order of items are preserved in the candidate list. """ def __init__(self, parent=None, allItems=(), selectedItems=()): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.allItems = allItems self.fromKeys = list(range(len(allItems))) self.selectedKeys = [] for item in selectedItems: key = allItems.index(item) self.fromKeys.remove(key) self.selectedKeys.append(key) self.setAttribute(Qt.WA_DeleteOnClose) fromLabel = QLabel(_("Select from")) self.fromList = QListWidget(self) self.fromList.addItems(allItems[key] for key in self.fromKeys) selectedLabel = QLabel(_("Selected")) self.selectedList = QListWidget(self) self.selectedList.addItems(allItems[key] for key in self.selectedKeys) self.selectButton = QPushButton(_("Select")) self.deselectButton = QPushButton(_("Deselect")) self.selectBox = QDialogButtonBox(Qt.Vertical) self.selectBox.addButton(self.selectButton, QDialogButtonBox.ActionRole) self.selectBox.addButton(self.deselectButton, QDialogButtonBox.ActionRole) self.selectButton.clicked.connect(self.on_select) self.deselectButton.clicked.connect(self.on_deselect) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addWidget(fromLabel, 0, 0) mainLayout.addWidget(selectedLabel, 0, 2) mainLayout.addWidget(self.fromList, 1, 0) mainLayout.addWidget(self.selectBox, 1, 1) mainLayout.addWidget(self.selectedList, 1, 2) mainLayout.addWidget(self.buttonBox, 2, 0, 1, 3) mainLayout.setAlignment(self.selectBox, Qt.AlignCenter) self.setLayout(mainLayout) def on_select(self): if len(self.fromList.selectedItems()): idx = self.fromList.currentRow() key = self.fromKeys.pop(idx) self.selectedKeys.append(key) item = self.fromList.takeItem(idx) self.selectedList.addItem(item) def on_deselect(self): if len(self.selectedList.selectedItems()): idx = self.selectedList.currentRow() item = self.selectedList.takeItem(idx) key = self.selectedKeys.pop(idx) idx = next((i for i, v in enumerate(self.fromKeys) if v > key), len(self.fromKeys)) self.fromKeys.insert(idx, key) self.fromList.insertItem(idx, item)
class NewSpaceDialog(QDialog): def __init__(self, parent=None, parentList=(), currIndex=0): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle('Create New Space') self.treeview = parent self.reply = None parentLabel = QLabel(_("Parent")) self.parentBox = QComboBox(self) self.parentBox.addItems(parentList) self.parentBox.setCurrentIndex(currIndex) nameLabel = QLabel(_("Space Name")) self.nameEdit = QLineEdit(self) self.importWidget = ImportAsWidget(self, self.nameEdit) basesTitle = QLabel(_("Base Spaces")) self.basesLine = QLineEdit() self.basesLine.setReadOnly(True) self.basesLine.setEnabled(False) self.basesEditButton = QPushButton(_("Edit")) self.basesEditButton.clicked.connect(self.on_base_edit) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addWidget(parentLabel, 0, 0) mainLayout.addWidget(self.parentBox, 0, 1) mainLayout.addWidget(nameLabel, 1, 0) mainLayout.addWidget(self.nameEdit, 1, 1) mainLayout.addWidget(self.importWidget, 2, 0, 1, 2) mainLayout.addWidget(basesTitle, 3, 0) mainLayout.addWidget(self.basesLine, 3, 1) mainLayout.addWidget(self.basesEditButton, 3, 2) mainLayout.addWidget(self.buttonBox, 4, 0, 1, 2) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'parent': self.parentBox.currentText(), 'name': self.nameEdit.text(), 'bases': self.basesLine.text(), 'define_var': self.importWidget.shouldImport.isChecked(), 'varname': self.importWidget.nameEdit.text() } if reply['define_var']: varname = reply['varname'] if not check_varname(varname): QMessageBox.critical( self, 'Error', 'Invalid variable name: %s' % varname ) return self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = {'accepted': False} super().reject() def on_base_edit(self): selected = self.basesLine.text().strip() if selected: selected = [base.strip() for base in selected.split(",")] else: selected = [] if self.treeview.model(): allItems = self.treeview.model().rootItem.getChildSpaceList() else: allItems = [] dialog = SelectBaseSpacesDialog( self, allItems=allItems, selectedItems=selected ) dialog.exec() if self.reply['accepted']: self.basesLine.setText(self.reply['value'])
class WriteModelDialog(QDialog): def __init__(self, parent=None): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setWindowTitle('Write Model') self.treeview = parent self.setAttribute(Qt.WA_DeleteOnClose) fixed_dir_layout = QHBoxLayout() browse_btn = QPushButton(ima.icon('DirOpenIcon'), '', self) browse_btn.setToolTip(_("Select model directory")) browse_btn.clicked.connect(self.select_directory) self.wd_edit = QLineEdit() fixed_dir_layout.addWidget(self.wd_edit) fixed_dir_layout.addWidget(browse_btn) fixed_dir_layout.setContentsMargins(0, 0, 0, 0) namelabel = QLabel(_("Folder Name")) self.nameEdit = QLineEdit(self) self.backupCheck = QCheckBox(_("Back up old folder")) self.backupCheck.setCheckState(Qt.Checked) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addLayout(fixed_dir_layout, 0, 0, 1, 2) mainLayout.addWidget(namelabel, 1, 0) mainLayout.addWidget(self.nameEdit, 1, 1) mainLayout.addWidget(self.backupCheck, 2, 0, 1, 2) mainLayout.addWidget(self.buttonBox, 3, 0, 1, 2) # mainLayout.setContentsMargins(0, 0, 0, 0) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'directory': self.wd_edit.text(), 'name': self.nameEdit.text(), 'backup': self.backupCheck.isChecked() } self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = {'accepted': False} super().reject() def select_directory(self): """Select directory""" basedir = to_text_string(self.wd_edit.text()) if not os.path.isdir(basedir): basedir = getcwd_or_home() directory = getexistingdirectory(self, _("Select directory"), basedir) if directory: self.wd_edit.setText(directory)
class ReadModelDialog(QDialog): def __init__(self, parent=None): QDialog.__init__( self, parent, flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint) self.setWindowTitle('Read Model') self.treeview = parent self.setAttribute(Qt.WA_DeleteOnClose) fixed_dir_layout = QHBoxLayout() browse_btn = QPushButton(ima.icon('DirOpenIcon'), '', self) browse_btn.setToolTip(_("Select model directory")) browse_btn.clicked.connect(self.select_directory) self.wd_edit = QLineEdit() fixed_dir_layout.addWidget(self.wd_edit) fixed_dir_layout.addWidget(browse_btn) fixed_dir_layout.setContentsMargins(0, 0, 0, 0) namelabel = QLabel(_("Model Name")) self.nameEdit = QLineEdit(self) self.importWidget = ImportAsWidget(self, self.nameEdit) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) mainLayout = QGridLayout(self) mainLayout.addLayout(fixed_dir_layout, 0, 0, 1, 2) mainLayout.addWidget(namelabel, 1, 0) mainLayout.addWidget(self.nameEdit, 1, 1) mainLayout.addWidget(self.importWidget, 2, 0, 1, 2) mainLayout.addWidget(self.buttonBox, 3, 0, 1, 2) # mainLayout.setContentsMargins(0, 0, 0, 0) self.setLayout(mainLayout) def accept(self) -> None: reply = { 'accepted': True, 'directory': self.wd_edit.text(), 'name': self.nameEdit.text(), 'define_var': self.importWidget.shouldImport.isChecked(), 'varname': self.importWidget.nameEdit.text() } if reply['define_var']: varname = reply['varname'] if not check_varname(varname): QMessageBox.critical( self, 'Error', 'Invalid variable name: %s' % varname ) return self.treeview.reply = reply super().accept() def reject(self) -> None: self.treeview.reply = {'accepted': False} super().reject() def select_directory(self): """Select directory""" basedir = to_text_string(self.wd_edit.text()) if not os.path.isdir(basedir): basedir = getcwd_or_home() directory = getexistingdirectory(self, _("Select directory"), basedir) if directory: self.wd_edit.setText(directory)