From 887a9119b294bf5ba702603dc15014ea21fe3435 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Sun, 22 Jul 2012 02:02:29 -0400 Subject: [PATCH] ENH: Simplify creation of Slider widget. --- skimage/viewer/plugins/base.py | 23 +++++++++++++++-------- skimage/viewer/plugins/canny.py | 9 +++------ skimage/viewer/widgets/__init__.py | 1 + skimage/viewer/widgets/core.py | 21 +++++++++++++++++++++ 4 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 skimage/viewer/widgets/__init__.py create mode 100644 skimage/viewer/widgets/core.py diff --git a/skimage/viewer/plugins/base.py b/skimage/viewer/plugins/base.py index e4bcd17b..1005384a 100644 --- a/skimage/viewer/plugins/base.py +++ b/skimage/viewer/plugins/base.py @@ -1,7 +1,7 @@ from PyQt4 import QtGui import matplotlib as mpl -from skimage.io._plugins.q_color_mixer import IntelligentSlider +from ..widgets import Slider class Plugin(QtGui.QDialog): @@ -78,17 +78,17 @@ class Plugin(QtGui.QDialog): else: return param - def add_argument(self, name, low, high, callback, **kwargs): - name, slider = self.add_slider(name, low, high, callback, **kwargs) + def add_argument(self, name, low, high, **kwargs): + name, slider = self.add_slider(name, low, high, **kwargs) self.arguments.append(slider) - def add_keyword_argument(self, name, low, high, callback, **kwargs): - name, slider = self.add_slider(name, low, high, callback, **kwargs) + def add_keyword_argument(self, name, low, high, **kwargs): + name, slider = self.add_slider(name, low, high, **kwargs) self.keyword_arguments[name] = slider - def add_slider(self, name, low, high, callback, **kwargs): - slider = IntelligentSlider(name, low, high, callback, - orientation='horizontal', **kwargs) + def add_slider(self, name, low, high, **kwargs): + slider = Slider(name, low, high, **kwargs) + slider.callback = self.caller self.layout.addWidget(slider, self.row, 0) self.row += 1 return name.replace(' ', '_'), slider @@ -110,6 +110,13 @@ class Plugin(QtGui.QDialog): This should be used in lieu of `figure.canvas.mpl_connect` since this function stores call back ids for later clean up. + + Parameters + ---------- + event : str + Matplotlib event. + callback : function + Callback function with a matplotlib Event object as its argument. """ cid = self.image_viewer.connect_event(event, callback) self.cids.append(cid) diff --git a/skimage/viewer/plugins/canny.py b/skimage/viewer/plugins/canny.py index 376638e5..c93d5b0d 100644 --- a/skimage/viewer/plugins/canny.py +++ b/skimage/viewer/plugins/canny.py @@ -12,12 +12,9 @@ class CannyPlugin(OverlayPlugin): 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, - 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') + self.add_keyword_argument('sigma', 0, 5, update_on='release') + self.add_keyword_argument('low_threshold', 0, 255, update_on='release') + self.add_keyword_argument('high_threshold', 0, 255, update_on='release') # Call callback so that image is updated to slider values. self.caller() diff --git a/skimage/viewer/widgets/__init__.py b/skimage/viewer/widgets/__init__.py new file mode 100644 index 00000000..5af24064 --- /dev/null +++ b/skimage/viewer/widgets/__init__.py @@ -0,0 +1 @@ +from core import * diff --git a/skimage/viewer/widgets/core.py b/skimage/viewer/widgets/core.py new file mode 100644 index 00000000..e68bda7f --- /dev/null +++ b/skimage/viewer/widgets/core.py @@ -0,0 +1,21 @@ +from skimage.io._plugins.q_color_mixer import IntelligentSlider + +class Slider(IntelligentSlider): + """Slider widget. + + Parameters + ---------- + name : str + Name of slider parameter. If this parameter is passed as a keyword + argument, it must match the name of that keyword argument. In addition, + this name is displayed as the name of the slider. + low, high : float + Range of slider values. + ptype : {'arg' | 'kwarg' | ...} + Parameter + """ + def __init__(self, name, low, high, ptype='kwarg', callback=None, **kwargs): + self.ptype = ptype + kwargs.setdefault('orientation', 'horizontal') + scale = (high - low) / 1000.0 + super(Slider, self).__init__(name, scale, low, callback, **kwargs)