pyqtgraph/pyqtgraph/parametertree/parameterTypes/numeric.py

59 lines
2.0 KiB
Python

from .basetypes import WidgetParameterItem
from ...widgets.SpinBox import SpinBox
class NumericParameterItem(WidgetParameterItem):
"""
Subclasses `WidgetParameterItem` to provide the following types:
========================== =============================================================
**Registered Types:**
int Displays a :class:`SpinBox <pyqtgraph.SpinBox>` in integer
mode.
float Displays a :class:`SpinBox <pyqtgraph.SpinBox>`.
========================== =============================================================
"""
def makeWidget(self):
opts = self.param.opts
t = opts['type']
defs = {
'value': 0, 'min': None, 'max': None,
'step': 1.0, 'dec': False,
'siPrefix': False, 'suffix': '', 'decimals': 3,
}
if t == 'int':
defs['int'] = True
defs['minStep'] = 1.0
for k in defs:
if k in opts:
defs[k] = opts[k]
if 'limits' in opts:
defs['min'], defs['max'] = opts['limits']
w = SpinBox()
w.setOpts(**defs)
w.sigChanged = w.sigValueChanged
w.sigChanging = w.sigValueChanging
return w
def updateDisplayLabel(self, value=None):
if value is None:
value = self.widget.lineEdit().text()
super().updateDisplayLabel(value)
def showEditor(self):
super().showEditor()
self.widget.selectNumber() # select the numerical portion of the text for quick editing
def limitsChanged(self, param, limits):
self.widget.setOpts(bounds=limits)
def optsChanged(self, param, opts):
super().optsChanged(param, opts)
sbOpts = {}
if 'units' in opts and 'suffix' not in opts:
sbOpts['suffix'] = opts['units']
for k, v in opts.items():
if k in self.widget.opts:
sbOpts[k] = v
self.widget.setOpts(**sbOpts)
self.updateDisplayLabel()