def setValues(self): expr = self.hints.get('expr', self._defaults['expr']) vary = self.hints['vary'] for name, widget in self.edits[:4]: # floating point elements v = self.hints.get(name, self._defaults[name]) with blocked(widget): widget.setValue(v) with blocked(self.vary_e): self.vary_e.setCurrentText(vary) with blocked(self.expr_e): self.expr_e.setText(expr) self.update_gui()
def setU(self, upper, user=True): if user: self.user_changed = True if self.upper != upper: self.upper = upper with blocked(self.uspin): self.uspin.setValue(upper) self.uline.setValue(upper) self.changed.emit()
def setL(self, lower, user=True): if user: self.user_changed = True if self.lower != lower: self.lower = lower with blocked(self.lspin): self.lspin.setValue(lower) self.lline.setValue(lower) self.changed.emit()
def setU(self, upper, user=True): if user: self.user_changed = True if self.upper != upper: self.upper = upper with blocked(self.uspin): self.uspin.setValue(upper) self.uline.setValue(upper) self.changed.emit()
def setL(self, lower, user=True): if user: self.user_changed = True if self.lower != lower: self.lower = lower with blocked(self.lspin): self.lspin.setValue(lower) self.lline.setValue(lower) self.changed.emit()
def set_limits(self, limits, limitbox, user=True): if user: self.user_changed = True row, role = self.form_lim.getLayoutPosition(limitbox) if self._limits[row] != limits: self._limits[row] = limits with blocked(self.form_lim): limitbox.lowlime.setValue(limits[0]) limitbox.highlime.setValue(limits[1]) self.changed.emit()
def set_limits(self, limits, limitbox, user=True): if user: self.user_changed = True row, role = self.form_lim.getLayoutPosition(limitbox) if self._limits[row] != limits: self._limits[row] = limits with blocked(self.form_lim): limitbox.lowlime.setValue(limits[0]) limitbox.highlime.setValue(limits[1]) self.changed.emit()
def setValues(self, **kwargs): """Set parameter hint value(s) for the parameter represented by this widget. Possible keywords are ('value', 'vary', 'min', 'max', 'expr') """ value = kwargs.get('value', None) min = kwargs.get('min', None) max = kwargs.get('max', None) expr = kwargs.get('expr', None) vary = kwargs.get('vary', None) # Prioritize current gui setting vary_opt = self.vary_e.currentText() if expr is not None and expr != "": vary_opt = 'expr' elif vary is False: vary_opt = 'fixed' elif vary_opt not in ('limits', 'delta'): vary_opt = 'limits' elif vary_opt == 'delta' and value is not None: d = self.delta_e.value() min = value - d max = value + d elif vary_opt == 'limits' and value is not None and min is not None and max is not None\ and value - min == max - value: # restore delta setting on param load vary_opt = 'delta' with blocked(self.delta_e): self.delta_e.setValue(value - min) with blocked(self.vary_e): self.vary_e.setCurrentText(vary_opt) if value is not None: with blocked(self.val_e): self.val_e.setValue(value) if min is not None: with blocked(self.min_e): self.min_e.setValue(min) if max is not None: with blocked(self.max_e): self.max_e.setValue(max) self.update_gui()
def set_param_hints(self, name, h, user=True): if user: self.user_changed = True if self.__values[name] != h: self.__values[name] = h with blocked(self.__editors[name]): self.__editors[name].setValues(**h) l = self.__lines.get(name, None) if l is not None and 'value' in h: l.setValue(h['value']) self.changed.emit()
def setIntervals(self, n): n = numpy.clip(n, self.__slider.minimum(), self.__slider.maximum()) n = int(n) if self.__nintervals != n: self.__nintervals = n # blocking signals in order to differentiate between # changed by user (notified through __on_valueChanged) or # changed programmatically (this) with blocked(self.__slider): self.__slider.setValue(n) self.__slabel.setText(str(self.__slider.value())) self.changed.emit()
def setIntervals(self, n): n = numpy.clip(n, self.__slider.minimum(), self.__slider.maximum()) n = int(n) if self.__nintervals != n: self.__nintervals = n # blocking signals in order to differentiate between # changed by user (notified through __on_valueChanged) or # changed programmatically (this) with blocked(self.__slider): self.__slider.setValue(n) self.__slabel.setText(str(self.__slider.value())) self.changed.emit()
def set_all_limits(self, limits, user=True): if user: self.user_changed = True self._limits = limits for row in range(len(limits)): limitbox = self.form_lim.itemAt(row, 1) if limitbox is None: limitbox = self.add_limit(row=row) with blocked(limitbox): limitbox.lowlime.setValue(limits[row][0]) limitbox.highlime.setValue(limits[row][1]) self.changed.emit()
def set_all_limits(self, limits, user=True): if user: self.user_changed = True self._limits = limits for row in range(len(limits)): limitbox = self.form_lim.itemAt(row, 1) if limitbox is None: limitbox = self.add_limit(row=row) with blocked(limitbox): limitbox.lowlime.setValue(limits[row][0]) limitbox.highlime.setValue(limits[row][1]) self.changed.emit()
def __init__(self, hints, parent=None, **kwargs): super().__init__(parent, **kwargs) layout = QHBoxLayout() layout.setSpacing(2) layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred) self.hints = hints assert 'vary' in self.hints minf, maxf = -sys.float_info.max, sys.float_info.max self._defaults = { 'min': UNUSED_VALUE, 'value': DEFAULT_VALUE, 'max': UNUSED_VALUE, 'delta': DEFAULT_DELTA, 'expr': '' } self.min_e = CompactDoubleSpinBox(minimum=UNUSED_VALUE, maximum=maxf, singleStep=0.5, value=self.hints.get( 'min', self._defaults["min"]), specialValueText="None") self.val_e = CompactDoubleSpinBox(minimum=minf, maximum=maxf, singleStep=0.5, value=self.hints.get( 'value', self._defaults["value"])) self.max_e = CompactDoubleSpinBox(minimum=UNUSED_VALUE, maximum=maxf, singleStep=0.5, value=self.hints.get( 'max', self._defaults["min"]), specialValueText="None") self.delta_e = CompactDoubleSpinBox(minimum=minf, maximum=maxf, singleStep=0.5, value=self.hints.get( 'delta', self._defaults["delta"]), prefix="±", visible=False) self.vary_e = QComboBox() v_opt = ('fixed', 'limits', 'delta', 'expr') if 'expr' in self.hints \ else ('fixed', 'limits', 'delta') self.vary_e.insertItems(0, v_opt) with blocked(self.vary_e): self.vary_e.setCurrentText(self.hints['vary']) self.expr_e = QLineEdit(visible=False, enabled=False, text=self.hints.get('expr', "")) self.edits = [("min", self.min_e), ("value", self.val_e), ("max", self.max_e), ("delta", self.delta_e), ("vary", self.vary_e), ("expr", self.expr_e)] for name, widget in self.edits[:4]: # float fields widget.valueChanged[float].connect( lambda x, name=name: self._changed_float(x, name)) self.vary_e.currentTextChanged.connect(self._changed_vary) self.expr_e.textChanged.connect(self._changed_expr) for name, widget in self.edits: layout.addWidget(widget) widget.focusIn = self.focusIn self.setValues()