def loadIntegerFloatList(self, font, src, dst): values = " ".join(str(val) for val in getattr(font.info, src)) setattr(self, dst + "Edit", QLineEdit(values, self)) validator = QRegularExpressionValidator(self) validator.setRegularExpression( QRegularExpression("(-?\d+(.\d+)?\s*)*")) getattr(self, dst + "Edit").setValidator(validator)
def loadIntegerFloatList(self, font, src, dst): values = " ".join(str(val) for val in getattr(font.info, src)) setattr(self, dst + "Edit", QLineEdit(values, self)) validator = QRegularExpressionValidator(self) validator.setRegularExpression( QRegularExpression("(-?\d+(.\d+)?\s*)*")) getattr(self, dst + "Edit").setValidator(validator)
def __init__(self, parent=None): super(GotoLineDialog, self).__init__(parent) self.setWindowModality(Qt.WindowModal) self.setWindowTitle(self.tr("Go to…")) self.lineEdit = QLineEdit(self) validator = QRegularExpressionValidator(self) validator.setRegularExpression( QRegularExpression("(^[1-9][0-9]*(:[1-9][0-9]*)?$)?")) self.lineEdit.setValidator(validator) self.lineEdit.returnPressed.connect(self.accept) label = QLabel(self.tr("Enter a row:column to go to"), self) layout = QVBoxLayout(self) layout.addWidget(self.lineEdit) layout.addWidget(label) self.setLayout(layout)
def __init__(self, parent=None): super(GotoLineDialog, self).__init__(parent) self.setWindowModality(Qt.WindowModal) self.setWindowTitle(self.tr("Go to…")) self.lineEdit = QLineEdit(self) validator = QRegularExpressionValidator(self) validator.setRegularExpression( QRegularExpression("(^[1-9][0-9]*(:[1-9][0-9]*)?$)?")) self.lineEdit.setValidator(validator) self.lineEdit.returnPressed.connect(self.accept) label = QLabel(self.tr("Enter a row:column to go to"), self) layout = QVBoxLayout(self) layout.addWidget(self.lineEdit) layout.addWidget(label) self.setLayout(layout)
def VersionValidator(parent): validator = QRegularExpressionValidator(parent) validator.setRegularExpression( QRegularExpression("([0-9]+\\.[0-9]+\\.[0-9]+)?")) return validator
def VersionValidator(parent): validator = QRegularExpressionValidator(parent) validator.setRegularExpression(QRegularExpression("([0-9]+\\.[0-9]+\\.[0-9]+)?")) return validator
class ReactionAttributesDisplayWidget(QWidget, Ui_ReactionAttribs): changed = QtCore.pyqtSignal() def __init__(self, parent=None): super(ReactionAttributesDisplayWidget, self).__init__(parent) self.setupUi(self) self.model = None self.reaction = None self.default_id_border = self.idLineEdit.styleSheet() # Setup validator for SBML compliant ids self.validator = QRegularExpressionValidator() self.validator.setRegularExpression( QRegularExpression(r"^[a-zA-Z0-9_]*$")) self.idLineEdit.setValidator(self.validator) # Toggle id status self.validate_id() self.setup_connections() def setup_connections(self): # Connect validators self.idLineEdit.textChanged.connect(self.validate_id) # Connect inputs to changed self.idLineEdit.textChanged.connect(self.changed.emit) self.nameLineEdit.textChanged.connect(self.changed.emit) self.subsystemLineEdit.textChanged.connect(self.changed.emit) self.upperBoundInput.valueChanged.connect(self.changed.emit) self.lowerBoundInput.valueChanged.connect(self.changed.emit) self.objectiveCoefficientInput.valueChanged.connect(self.changed.emit) # Connect setting of the boundaries self.upperBoundInput.valueChanged.connect(self.set_range_lower_bound) self.lowerBoundInput.valueChanged.connect(self.set_range_upper_bound) def set_item(self, reaction, model): self.model = model self.reaction = reaction if reaction: # Set the range for the boundary inputs self.upperBoundInput.setRange(reaction.lower_bound, max(reaction.upper_bound, 1000.)) self.lowerBoundInput.setRange(min(reaction.lower_bound, -1000.), reaction.upper_bound) self.populate_widgets() def save_state(self): """ Save the current content of the input widgets to the reaction This slot is triggered by the accepted() signal of the dialog. """ if self.reaction.id != self.idLineEdit.text(): self.reaction.id = self.idLineEdit.text() self.model.repair(rebuild_relationships=False) self.reaction.name = self.nameLineEdit.text() self.reaction.lower_bound = self.lowerBoundInput.value() self.reaction.upper_bound = self.upperBoundInput.value() self.reaction.subsystem = self.subsystemLineEdit.text() if self.reaction.model: self.reaction.objective_coefficient = self.objectiveCoefficientInput.value( ) @property def content_changed(self): """ Check if the content of the input widgets is different from the original information of the reaction """ if self.reaction: return ( self.idLineEdit.text() != self.reaction.id or self.nameLineEdit.text() != self.reaction.name or self.subsystemLineEdit.text() != self.reaction.subsystem or self.upperBoundInput.value() != self.reaction.upper_bound or self.lowerBoundInput.value() != self.reaction.lower_bound or self.objectiveCoefficientInput.value() != self.reaction.objective_coefficient) else: return False def clear_information(self): """ Clear all information in the input widgets that are direct children of the dialog """ self.idLineEdit.clear() self.nameLineEdit.clear() self.subsystemLineEdit.clear() self.upperBoundInput.clear() self.lowerBoundInput.clear() self.objectiveCoefficientInput.clear() def populate_widgets(self): """ Update the information displayed in the individual input elements """ self.clear_information() if self.reaction is not None: self.idLineEdit.setText(self.reaction.id) self.idLineEdit.setCursorPosition(0) self.nameLineEdit.setText(self.reaction.name) self.nameLineEdit.setCursorPosition(0) self.subsystemLineEdit.setText(self.reaction.subsystem) self.subsystemLineEdit.setCursorPosition(0) self.upperBoundInput.setValue(self.reaction.upper_bound) self.lowerBoundInput.setValue(self.reaction.lower_bound) self.objectiveCoefficientInput.setValue( self.reaction.objective_coefficient) # Disable objective coefficient input if model not set self.objectiveCoefficientInput.setEnabled( self.reaction.model is not None) self.setWindowTitle(self.reaction.id) # Set the subsystem completer completer = QCompleter(list(self.model.subsystems.keys()), self) completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.subsystemLineEdit.setCompleter(completer) @QtCore.pyqtSlot(str) def validate_id(self, new_id=None): if not new_id: self.idLineEdit.setStyleSheet("border: 1px solid red;") self.labelIdStatus.setToolTip("Empty Id!") self.labelIdStatus.setVisible(True) elif self.reaction and new_id != self.reaction.id and new_id in self.model.reactions: self.idLineEdit.setStyleSheet("border: 1px solid red;") self.labelIdStatus.setToolTip("Id exists already in model!") self.labelIdStatus.setVisible(True) else: self.idLineEdit.setStyleSheet(self.default_id_border) self.labelIdStatus.setVisible(False) def valid_inputs(self): """ Check that all input elements that are required to have a valid input actually do so """ if self.reaction and self.idLineEdit.text(): return (self.idLineEdit.text() not in self.model.reactions or self.idLineEdit.text() == self.reaction.id) else: return False @QtCore.pyqtSlot() def set_range_upper_bound(self): """ Dynamically adjust the minimum range of the upperbound input to match the lower bound set This slot is triggered by the valueChanged-signal of the lower_bound input widget """ self.upperBoundInput.setMinimum(self.lowerBoundInput.value()) @QtCore.pyqtSlot() def set_range_lower_bound(self): """ Dynamically adjust the maxmimum range of the lowerbound input to match the upper bound set This slot is triggered by the valueChanged-signal of the upper_bound input widget """ self.lowerBoundInput.setMaximum(self.upperBoundInput.value())