diff options
author | Seth Hitefield <sdhitefield@gmail.com> | 2015-04-22 04:12:51 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2015-04-22 15:11:35 -0400 |
commit | 15fc0e3b72e655e5e1c8ebe9a077836c24fded6f (patch) | |
tree | dea74c4d53502b18eaa052949706a9b1e419612b /gr-qtgui/python/qtgui/range.py | |
parent | bb8e65d506b1e28b38548649ed2cf7fa86e70762 (diff) |
qtgui: improved type checking for range block and simplifies python.
Removes Long as a possible type. Doesn't really help in Python and GRC
doesn't recognize it easily.
Diffstat (limited to 'gr-qtgui/python/qtgui/range.py')
-rwxr-xr-x | gr-qtgui/python/qtgui/range.py | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py index bb7c100ea0..3eafc9002e 100755 --- a/gr-qtgui/python/qtgui/range.py +++ b/gr-qtgui/python/qtgui/range.py @@ -64,16 +64,15 @@ class Range(object): class RangeWidget(QtGui.QWidget): - def __init__(self, ranges, slot, label, style, astype="float"): + def __init__(self, ranges, slot, label, style, rangeType=float): """ Creates the QT Range widget """ QtGui.QWidget.__init__(self) self.range = ranges self.style = style - # astype tells the block how to return the value as a standard - # Python type. Can be: long, int, or float. - types = {"float": float, "long": long, "int": int} + # rangeType tells the block how to return the value as a standard + self.rangeType = rangeType # Top-block function to call when any value changes # Some widgets call this directly when their value changes. @@ -84,27 +83,26 @@ class RangeWidget(QtGui.QWidget): label = Qt.QLabel(label) layout.addWidget(label) - if style == "dial": - self.d_widget = self.Dial(self, self.range, self.notifyChanged, types[astype]) + self.d_widget = self.Dial(self, self.range, self.notifyChanged, rangeType) elif style == "slider": - self.d_widget = self.Slider(self, self.range, self.notifyChanged, types[astype]) + self.d_widget = self.Slider(self, self.range, self.notifyChanged, rangeType) elif style == "counter": # The counter widget can be directly wired to the notifyChanged slot - self.d_widget = self.Counter(self, self.range, self.notifyChanged, types[astype]) + self.d_widget = self.Counter(self, self.range, self.notifyChanged, rangeType) else: # The CounterSlider needs its own internal handlers before calling notifyChanged - self.d_widget = self.CounterSlider(self, self.range, self.notifyChanged, types[astype]) + self.d_widget = self.CounterSlider(self, self.range, self.notifyChanged, rangeType) layout.addWidget(self.d_widget) self.setLayout(layout) class Dial(QtGui.QDial): """ Creates the range using a dial """ - def __init__(self, parent, ranges, slot, astype=float): + def __init__(self, parent, ranges, slot, rangeType=float): QtGui.QDial.__init__(self, parent) - self.astype = astype + self.rangeType = rangeType # Setup the dial self.setRange(0, ranges.nsteps-1) @@ -123,14 +121,14 @@ class RangeWidget(QtGui.QWidget): def changed(self, value): """ Handles maping the value to the right range before calling the slot. """ val = self.range.map_range(value) - self.notifyChanged(self.astype(val)) + self.notifyChanged(self.rangeType(val)) class Slider(QtGui.QSlider): """ Creates the range using a slider """ - def __init__(self, parent, ranges, slot, astype=float): + def __init__(self, parent, ranges, slot, rangeType=float): QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent) - self.astype = astype + self.rangeType = rangeType # Setup the slider #self.setFocusPolicy(QtCore.Qt.NoFocus) @@ -158,7 +156,7 @@ class RangeWidget(QtGui.QWidget): def changed(self, value): """ Handle the valueChanged signal and map the value into the correct range """ val = self.range.map_range(value) - self.notifyChanged(self.astype(val)) + self.notifyChanged(self.rangeType(val)) def mousePressEvent(self, event): if((event.button() == QtCore.Qt.LeftButton)): @@ -177,10 +175,10 @@ class RangeWidget(QtGui.QWidget): class Counter(QtGui.QDoubleSpinBox): """ Creates the range using a counter """ - def __init__(self, parent, ranges, slot, astype=float): + def __init__(self, parent, ranges, slot, rangeType=float): QtGui.QDoubleSpinBox.__init__(self, parent) - self.astype = astype + self.rangeType = rangeType # Setup the counter self.setRange(ranges.min, ranges.max) @@ -195,20 +193,20 @@ class RangeWidget(QtGui.QWidget): def changed(self, value): """ Handle the valueChanged signal by converting to the right type """ - self.notifyChanged(self.astype(value)) + self.notifyChanged(self.rangeType(value)) class CounterSlider(QtGui.QWidget): """ Creates the range using a counter and slider """ - def __init__(self, parent, ranges, slot, astype=float): + def __init__(self, parent, ranges, slot, rangeType=float): QtGui.QWidget.__init__(self, parent) - self.astype = astype + self.rangeType = rangeType # Slot to call in the parent self.notifyChanged = slot - self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged, astype) - self.counter = RangeWidget.Counter(parent, ranges, self.counterChanged, astype) + self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged, rangeType) + self.counter = RangeWidget.Counter(parent, ranges, self.counterChanged, rangeType) # Need another horizontal layout to wrap the other widgets. layout = Qt.QHBoxLayout() @@ -225,8 +223,8 @@ class RangeWidget(QtGui.QWidget): # If the counter was changed, ignore any of these events if not self.ignoreSlider: # Value is already float. Just set the counter - self.counter.setValue(self.astype(value)) - self.notifyChanged(self.astype(value)) + self.counter.setValue(self.rangeType(value)) + self.notifyChanged(self.rangeType(value)) self.ignoreSlider = False def counterChanged(self, value): @@ -241,4 +239,21 @@ class RangeWidget(QtGui.QWidget): self.ignoreSlider = True self.slider.setValue(new) - self.notifyChanged(self.astype(value)) + self.notifyChanged(self.rangeType(value)) + + +if __name__ == "__main__": + from PyQt4 import Qt + import sys + + def valueChanged(frequency): + print("Value updated - " + str(frequency)) + + app = Qt.QApplication(sys.argv) + widget = RangeWidget(Range(0, 100, 10, 1, 100), valueChanged, "Test", "counter_slider", int) + + widget.show() + widget.setWindowTitle("Test Qt Range") + app.exec_() + + widget = None |