forked from M-Labs/artiq
gui/entries: remove ScientificSpinbox. Closes #457
This commit is contained in:
parent
2803b8574e
commit
36f8aa8d9e
|
@ -5,7 +5,6 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
from artiq.gui.tools import LayoutWidget, disable_scroll_wheel
|
from artiq.gui.tools import LayoutWidget, disable_scroll_wheel
|
||||||
from artiq.gui.scanwidget import ScanWidget
|
from artiq.gui.scanwidget import ScanWidget
|
||||||
from artiq.gui.scientific_spinbox import ScientificSpinBox
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -158,7 +157,7 @@ class _RangeScan(LayoutWidget):
|
||||||
disable_scroll_wheel(scanner)
|
disable_scroll_wheel(scanner)
|
||||||
self.addWidget(scanner, 0, 0, -1, 1)
|
self.addWidget(scanner, 0, 0, -1, 1)
|
||||||
|
|
||||||
start = ScientificSpinBox()
|
start = QtWidgets.QDoubleSpinBox()
|
||||||
start.setStyleSheet("QDoubleSpinBox {color:blue}")
|
start.setStyleSheet("QDoubleSpinBox {color:blue}")
|
||||||
start.setMinimumSize(110, 0)
|
start.setMinimumSize(110, 0)
|
||||||
start.setSizePolicy(QtWidgets.QSizePolicy(
|
start.setSizePolicy(QtWidgets.QSizePolicy(
|
||||||
|
@ -172,7 +171,7 @@ class _RangeScan(LayoutWidget):
|
||||||
disable_scroll_wheel(npoints)
|
disable_scroll_wheel(npoints)
|
||||||
self.addWidget(npoints, 1, 1)
|
self.addWidget(npoints, 1, 1)
|
||||||
|
|
||||||
stop = ScientificSpinBox()
|
stop = QtWidgets.QDoubleSpinBox()
|
||||||
stop.setStyleSheet("QDoubleSpinBox {color:red}")
|
stop.setStyleSheet("QDoubleSpinBox {color:red}")
|
||||||
stop.setMinimumSize(110, 0)
|
stop.setMinimumSize(110, 0)
|
||||||
disable_scroll_wheel(stop)
|
disable_scroll_wheel(stop)
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
import re
|
|
||||||
from PyQt5 import QtGui, QtWidgets
|
|
||||||
|
|
||||||
# after
|
|
||||||
# http://jdreaver.com/posts/2014-07-28-scientific-notation-spin-box-pyside.html
|
|
||||||
|
|
||||||
|
|
||||||
_inf = float("inf")
|
|
||||||
# Regular expression to find floats. Match groups are the whole string, the
|
|
||||||
# whole coefficient, the decimal part of the coefficient, and the exponent
|
|
||||||
# part.
|
|
||||||
_float_re = re.compile(r"(([+-]?\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)")
|
|
||||||
|
|
||||||
|
|
||||||
def valid_float_string(string):
|
|
||||||
match = _float_re.search(string)
|
|
||||||
if match:
|
|
||||||
return match.groups()[0] == string
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class FloatValidator(QtGui.QValidator):
|
|
||||||
def validate(self, string, position):
|
|
||||||
if valid_float_string(string):
|
|
||||||
return self.Acceptable, string, position
|
|
||||||
if string == "" or string[position-1] in "eE.-+":
|
|
||||||
return self.Intermediate, string, position
|
|
||||||
return self.Invalid, string, position
|
|
||||||
|
|
||||||
def fixup(self, text):
|
|
||||||
match = _float_re.search(text)
|
|
||||||
if match:
|
|
||||||
return match.groups()[0]
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
class ScientificSpinBox(QtWidgets.QDoubleSpinBox):
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.setMinimum(-_inf)
|
|
||||||
self.setMaximum(_inf)
|
|
||||||
self.validator = FloatValidator()
|
|
||||||
self.setDecimals(20)
|
|
||||||
|
|
||||||
def validate(self, text, position):
|
|
||||||
return self.validator.validate(text, position)
|
|
||||||
|
|
||||||
def fixup(self, text):
|
|
||||||
return self.validator.fixup(text)
|
|
||||||
|
|
||||||
def valueFromText(self, text):
|
|
||||||
return float(text)
|
|
||||||
|
|
||||||
def textFromValue(self, value):
|
|
||||||
return format_float(value)
|
|
||||||
|
|
||||||
def stepBy(self, steps):
|
|
||||||
text = self.cleanText()
|
|
||||||
groups = _float_re.search(text).groups()
|
|
||||||
decimal = float(groups[1])
|
|
||||||
decimal += steps
|
|
||||||
new_string = "{:g}".format(decimal) + (groups[3] if groups[3] else "")
|
|
||||||
self.lineEdit().setText(new_string)
|
|
||||||
|
|
||||||
|
|
||||||
def format_float(value):
|
|
||||||
"""Modified form of the 'g' format specifier."""
|
|
||||||
string = "{:g}".format(value)
|
|
||||||
string = string.replace("e+", "e")
|
|
||||||
string = re.sub("e(-?)0*(\d+)", r"e\1\2", string)
|
|
||||||
return string
|
|
Loading…
Reference in New Issue