예제 #1
0
    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()
예제 #4
0
 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()
예제 #5
0
 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()
예제 #6
0
 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()
예제 #7
0
 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()
예제 #8
0
    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()
예제 #9
0
 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()
예제 #10
0
 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()
예제 #11
0
 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()
예제 #12
0
 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()
예제 #13
0
 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()
예제 #14
0
    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()