diff --git a/skimage/io/_plugins/q_color_mixer.py b/skimage/io/_plugins/q_color_mixer.py index 085bd751..7a5d1778 100644 --- a/skimage/io/_plugins/q_color_mixer.py +++ b/skimage/io/_plugins/q_color_mixer.py @@ -6,7 +6,6 @@ from PyQt4.QtCore import Qt from util import ColorMixer - class IntelligentSlider(QWidget): ''' A slider that adds a 'name' attribute and calls a callback with 'name' as an argument to the registered callback. @@ -19,7 +18,8 @@ class IntelligentSlider(QWidget): The range of the slider is hardcoded from zero - 1000, but it supports a conversion factor so you can scale the results''' - def __init__(self, name, a, b, callback, orientation='vertical'): + def __init__(self, name, a, b, callback, orientation='vertical', + update_on='move'): QWidget.__init__(self) self.name = name self.callback = callback @@ -41,7 +41,12 @@ class IntelligentSlider(QWidget): self.slider = QSlider(orientation_slider) self.slider.setRange(0, 1000) self.slider.setValue(500) - self.slider.valueChanged.connect(self.slider_changed) + if update_on == 'move': + self.slider.sliderMoved.connect(self.slider_changed) + elif update_on == 'release': + self.slider.sliderReleased.connect(self.slider_changed) + else: + raise ValueError("Unexpected value %s for 'update_on'" % update_on) self.name_label = QLabel() self.name_label.setText(self.name) @@ -62,9 +67,12 @@ class IntelligentSlider(QWidget): self.layout.addWidget(self.name_label, 0, 0) self.layout.addWidget(self.slider, 0, 1, alignment) self.layout.addWidget(self.value_label, 0, 2) + else: + msg = "Unexpected value %s for 'orientation'" + raise ValueError(msg % orientation) # bind this to the valueChanged signal of the slider - def slider_changed(self, val): + def slider_changed(self): val = self.val() self.value_label.setText(str(val)[:4]) diff --git a/skimage/viewer/plugins/base.py b/skimage/viewer/plugins/base.py index aa7229ad..1757f257 100644 --- a/skimage/viewer/plugins/base.py +++ b/skimage/viewer/plugins/base.py @@ -98,17 +98,17 @@ class Plugin(QtGui.QDialog): else: return param - def add_argument(self, name, low, high, callback): - name, slider = self.add_slider(name, low, high, callback) + def add_argument(self, name, low, high, callback, **kwargs): + name, slider = self.add_slider(name, low, high, callback, **kwargs) self.arguments[name] = slider - def add_keyword_argument(self, name, low, high, callback): - name, slider = self.add_slider(name, low, high, callback) + def add_keyword_argument(self, name, low, high, callback, **kwargs): + name, slider = self.add_slider(name, low, high, callback, **kwargs) self.keyword_arguments[name] = slider - def add_slider(self, name, low, high, callback): + def add_slider(self, name, low, high, callback, **kwargs): slider = IntelligentSlider(name, low, high, callback, - orientation='horizontal') + orientation='horizontal', **kwargs) self.layout.addWidget(slider, self.row, 0) self.row += 1 return name.replace(' ', '_'), slider diff --git a/skimage/viewer/plugins/canny.py b/skimage/viewer/plugins/canny.py index 88312036..cf3b5253 100644 --- a/skimage/viewer/plugins/canny.py +++ b/skimage/viewer/plugins/canny.py @@ -11,9 +11,12 @@ class CannyPlugin(Plugin): width = kwargs.get('width', 400) super(CannyPlugin, self).__init__(image_viewer, width=width, height=height) - self.add_keyword_argument('sigma', 0.005, 0, self.caller) - self.add_keyword_argument('low_threshold', 0.255, 0, self.caller) - self.add_keyword_argument('high_threshold', 0.255, 0, self.caller) + self.add_keyword_argument('sigma', 0.005, 0, self.caller, + update_on='release') + self.add_keyword_argument('low_threshold', 0.255, 0, self.caller, + update_on='release') + self.add_keyword_argument('high_threshold', 0.255, 0, self.caller, + update_on='release') # Call callback so that image is updated to slider values. self.caller()