diff options
Diffstat (limited to 'gr-qtgui/python/qtgui/range.py.cmakein')
-rwxr-xr-x | gr-qtgui/python/qtgui/range.py.cmakein | 81 |
1 files changed, 51 insertions, 30 deletions
diff --git a/gr-qtgui/python/qtgui/range.py.cmakein b/gr-qtgui/python/qtgui/range.py.cmakein index 05f2f421e0..1fc85b8e4c 100755 --- a/gr-qtgui/python/qtgui/range.py.cmakein +++ b/gr-qtgui/python/qtgui/range.py.cmakein @@ -37,21 +37,22 @@ class Range(object): self.precision = (precision + 2) if precision > 0 else 0 def find_nsteps(self): - self.nsteps = (self.max + self.step - self.min)/self.step + self.nsteps = (self.max + self.step - self.min) / self.step def demap_range(self, val): if val > self.max: val = self.max if val < self.min: val = self.min - return ((val-self.min)/self.step) + return ((val - self.min) / self.step) def map_range(self, val): if val > self.nsteps: val = self.max if val < 0: val = 0 - return (val*self.step+self.min) + return (val * self.step + self.min) + class QEngValidator(Qt.QValidator): def __init__(self, minimum, maximum, parent): @@ -63,9 +64,9 @@ class QEngValidator(Qt.QValidator): def validate(self, s, pos): try: - val=eng_notation.str_to_num(s) + val = eng_notation.str_to_num(s) except (IndexError, ValueError) as e: - if re.match(self.re,s): + if re.match(self.re, s): self.parent.setStyleSheet("background-color: yellow;") return (Qt.QValidator.Intermediate, s, pos) else: @@ -83,6 +84,7 @@ class QEngValidator(Qt.QValidator): def fixup(self, s): pass + class RangeWidget(QtWidgets.QWidget): def __init__(self, ranges, slot, label, style, rangeType=float, orientation=QtCore.Qt.Horizontal): """ Creates the QT Range widget """ @@ -100,38 +102,45 @@ class RangeWidget(QtWidgets.QWidget): self.notifyChanged = slot layout = Qt.QHBoxLayout() - layout.setContentsMargins( 0,0,0,0 ) + layout.setContentsMargins(0, 0, 0, 0) label = Qt.QLabel(label) layout.addWidget(label) if style == "dial": - self.d_widget = self.Dial(self, self.range, self.notifyChanged, rangeType) + self.d_widget = self.Dial( + self, self.range, self.notifyChanged, rangeType) elif style == "slider": - self.d_widget = self.Slider(self, self.range, self.notifyChanged, rangeType, orientation) + self.d_widget = self.Slider( + self, self.range, self.notifyChanged, rangeType, orientation) elif style == "counter": # The counter widget can be directly wired to the notifyChanged slot - self.d_widget = self.Counter(self, self.range, self.notifyChanged, rangeType) + self.d_widget = self.Counter( + self, self.range, self.notifyChanged, rangeType) elif style == "eng": # Text input with engineering notation support - self.d_widget = self.Eng(self, self.range, self.notifyChanged, rangeType) + self.d_widget = self.Eng( + self, self.range, self.notifyChanged, rangeType) elif style == "eng_slider": - self.d_widget = self.EngSlider(self, self.range, self.notifyChanged, rangeType, orientation) + self.d_widget = self.EngSlider( + self, self.range, self.notifyChanged, rangeType, orientation) else: # The CounterSlider needs its own internal handlers before calling notifyChanged - self.d_widget = self.CounterSlider(self, self.range, self.notifyChanged, rangeType, orientation) + self.d_widget = self.CounterSlider( + self, self.range, self.notifyChanged, rangeType, orientation) layout.addWidget(self.d_widget) self.setLayout(layout) class Dial(QtWidgets.QDial): """ Creates the range using a dial """ + def __init__(self, parent, ranges, slot, rangeType=float): QtWidgets.QDial.__init__(self, parent) self.rangeType = rangeType # Setup the dial - self.setRange(0, int(ranges.nsteps-1)) + self.setRange(0, int(ranges.nsteps - 1)) self.setSingleStep(1) self.setNotchesVisible(True) self.range = ranges @@ -151,13 +160,14 @@ class RangeWidget(QtWidgets.QWidget): class Slider(QtWidgets.QSlider): """ Creates the range using a slider """ + def __init__(self, parent, ranges, slot, rangeType=float, orientation=QtCore.Qt.Horizontal): QtWidgets.QSlider.__init__(self, orientation, parent) self.rangeType = rangeType # Setup the slider - #self.setFocusPolicy(QtCore.Qt.NoFocus) + # self.setFocusPolicy(QtCore.Qt.NoFocus) self.setRange(0, int(ranges.nsteps - 1)) self.setTickPosition(2) self.setSingleStep(1) @@ -169,7 +179,7 @@ class RangeWidget(QtWidgets.QWidget): self.setValue(temp) if ranges.nsteps > ranges.min_length: - interval = int(ranges.nsteps/ranges.min_length) + interval = int(ranges.nsteps / ranges.min_length) self.setTickInterval(interval) self.setPageStep(interval) else: @@ -188,9 +198,9 @@ class RangeWidget(QtWidgets.QWidget): def mousePressEvent(self, event): if((event.button() == QtCore.Qt.LeftButton)): if self.orientation == QtCore.Qt.Horizontal: - new = self.minimum() + ((self.maximum()-self.minimum()) * event.x()) / self.width() + new = self.minimum() + ((self.maximum() - self.minimum()) * event.x()) / self.width() else: - new = self.minimum() + ((self.maximum()-self.minimum()) * event.y()) / self.height() + new = self.minimum() + ((self.maximum() - self.minimum()) * event.y()) / self.height() self.setValue(int(new)) event.accept() # Use repaint rather than calling the super mousePressEvent. @@ -199,15 +209,16 @@ class RangeWidget(QtWidgets.QWidget): def mouseMoveEvent(self, event): if self.orientation == QtCore.Qt.Horizontal: - new = self.minimum() + ((self.maximum()-self.minimum()) * event.x()) / self.width() + new = self.minimum() + ((self.maximum() - self.minimum()) * event.x()) / self.width() else: - new = self.minimum() + ((self.maximum()-self.minimum()) * event.y()) / self.height() + new = self.minimum() + ((self.maximum() - self.minimum()) * event.y()) / self.height() self.setValue(int(new)) event.accept() QtWidgets.QSlider.repaint(self) class Counter(QtWidgets.QDoubleSpinBox): """ Creates the range using a counter """ + def __init__(self, parent, ranges, slot, rangeType=float): QtWidgets.QDoubleSpinBox.__init__(self, parent) @@ -230,6 +241,7 @@ class RangeWidget(QtWidgets.QWidget): class Eng(QtWidgets.QLineEdit): """ Creates the range using a text input """ + def __init__(self, parent, ranges, slot, rangeType=float): QtWidgets.QLineEdit.__init__(self) @@ -251,6 +263,7 @@ class RangeWidget(QtWidgets.QWidget): class CounterSlider(QtWidgets.QWidget): """ Creates the range using a counter and slider """ + def __init__(self, parent, ranges, slot, rangeType=float, orientation=QtCore.Qt.Horizontal): QtWidgets.QWidget.__init__(self, parent) @@ -259,12 +272,14 @@ class RangeWidget(QtWidgets.QWidget): # Slot to call in the parent self.notifyChanged = slot - self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged, rangeType, orientation) - self.counter = RangeWidget.Counter(parent, ranges, self.counterChanged, rangeType) + self.slider = RangeWidget.Slider( + parent, ranges, self.sliderChanged, rangeType, orientation) + self.counter = RangeWidget.Counter( + parent, ranges, self.counterChanged, rangeType) # Need another horizontal layout to wrap the other widgets. layout = Qt.QHBoxLayout() - layout.setContentsMargins( 0,0,0,0 ) + layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(10) layout.addWidget(self.slider) layout.addWidget(self.counter) @@ -308,6 +323,7 @@ class RangeWidget(QtWidgets.QWidget): class EngSlider(QtWidgets.QWidget): """ Creates the range using a counter and slider """ + def __init__(self, parent, ranges, slot, rangeType=float, orientation=QtCore.Qt.Horizontal): QtWidgets.QWidget.__init__(self, parent) @@ -317,8 +333,10 @@ class RangeWidget(QtWidgets.QWidget): # Slot to call in the parent self.notifyChanged = slot - self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged, rangeType, orientation) - self.counter = RangeWidget.Eng(parent, ranges, self.counterChanged, rangeType) + self.slider = RangeWidget.Slider( + parent, ranges, self.sliderChanged, rangeType, orientation) + self.counter = RangeWidget.Eng( + parent, ranges, self.counterChanged, rangeType) # Need another horizontal layout to wrap the other widgets. layout = Qt.QHBoxLayout() @@ -338,7 +356,8 @@ class RangeWidget(QtWidgets.QWidget): if not self.ignoreSlider: # convert Value to eng string self.ignoreCounter = True - self.counter.setText(eng_notation.num_to_str(self.rangeType(value))) + self.counter.setText( + eng_notation.num_to_str(self.rangeType(value))) self.notifyChanged(self.rangeType(value)) self.ignoreSlider = False @@ -346,17 +365,17 @@ class RangeWidget(QtWidgets.QWidget): """ Handles changing the slider when the counter is updated """ # Get the current slider value and check to see if the new value changes it current = self.slider.value() - print("counterChanged",value,"ign",self.ignoreCounter) + print("counterChanged", value, "ign", self.ignoreCounter) new = int(round(self.range.demap_range(value), 0)) # If it needs to change, ignore the slider event # Otherwise, the slider will cause the counter to round to the nearest tick if current != new: - self.ignoreSlider = True - self.slider.setValue(new) + self.ignoreSlider = True + self.slider.setValue(new) if not self.ignoreCounter: - print("to notify",self.rangeType(value)) + print("to notify", self.rangeType(value)) self.notifyChanged(self.rangeType(value)) self.ignoreCounter = False @@ -369,6 +388,7 @@ class RangeWidget(QtWidgets.QWidget): self.slider.setValue(new) self.first = False + if __name__ == "__main__": from PyQt5 import Qt import sys @@ -377,7 +397,8 @@ if __name__ == "__main__": print("Value updated - " + str(frequency)) app = Qt.QApplication(sys.argv) - widget = RangeWidget(Range(0, 100, 10, 1, 100), valueChanged, "Test", "counter_slider", int) + widget = RangeWidget(Range(0, 100, 10, 1, 100), + valueChanged, "Test", "counter_slider", int) widget.show() widget.setWindowTitle("Test Qt Range") |