From e96aca563792d1bab41ccdd239b452be362e2fff Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Fri, 3 Aug 2012 22:27:05 -0400 Subject: [PATCH] ENH: Add OK/Cancel buttons --- skimage/viewer/widgets/core.py | 2 +- skimage/viewer/widgets/history.py | 39 ++++++++++++++++++++---- viewer_examples/plugins/median_filter.py | 5 +-- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/skimage/viewer/widgets/core.py b/skimage/viewer/widgets/core.py index 8610f910..625e707b 100644 --- a/skimage/viewer/widgets/core.py +++ b/skimage/viewer/widgets/core.py @@ -29,7 +29,7 @@ class BaseWidget(QtGui.QWidget): plugin = RequiredAttr("Widget is not attached to a Plugin.") - def __init__(self, name, ptype, callback): + def __init__(self, name, ptype=None, callback=None): super(BaseWidget, self).__init__() self.name = name self.ptype = ptype diff --git a/skimage/viewer/widgets/history.py b/skimage/viewer/widgets/history.py index daaf38cd..cc586579 100644 --- a/skimage/viewer/widgets/history.py +++ b/skimage/viewer/widgets/history.py @@ -7,16 +7,43 @@ from skimage import io from .core import BaseWidget -__all__ = ['SaveButtons'] +__all__ = ['OKCancelButtons', 'SaveButtons'] + + +class OKCancelButtons(BaseWidget): + """Buttons that close the parent plugin. + + OK will replace the original image with the current (filtered) image. + Cancel will just close the plugin. + """ + def __init__(self): + name = 'OK/Cancel' + super(OKCancelButtons, self).__init__(name) + + self.ok = QtGui.QPushButton('OK') + self.ok.clicked.connect(self.update_original_image) + self.cancel = QtGui.QPushButton('Cancel') + self.cancel.clicked.connect(self.close_plugin) + + self.layout = QtGui.QHBoxLayout(self) + self.layout.addWidget(self.cancel) + self.layout.addWidget(self.ok) + + def update_original_image(self): + image = self.plugin.image_viewer.image + self.plugin.image_viewer.original_image = image + self.plugin.close() + + def close_plugin(self): + # Image viewer will restore original image on close. + self.plugin.close() class SaveButtons(BaseWidget): + """Buttons to save image to io.stack or to a file.""" - def __init__(self, default_format='png'): - name = 'Save to:' - ptype = None - callback = None - super(SaveButtons, self).__init__(name, ptype, callback) + def __init__(self, name='Save to:', default_format='png'): + super(SaveButtons, self).__init__(name) self.default_format = default_format diff --git a/viewer_examples/plugins/median_filter.py b/viewer_examples/plugins/median_filter.py index 57d04397..3a050382 100644 --- a/viewer_examples/plugins/median_filter.py +++ b/viewer_examples/plugins/median_filter.py @@ -3,8 +3,8 @@ from skimage.filter import median_filter from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider -from skimage.viewer.widgets.history import SaveButtons -from skimage.viewer.plugins.overlayplugin import Plugin +from skimage.viewer.widgets.history import OKCancelButtons, SaveButtons +from skimage.viewer.plugins.base import Plugin image = data.coins() @@ -13,6 +13,7 @@ viewer = ImageViewer(image) plugin = Plugin(image_filter=median_filter) plugin += Slider('radius', 2, 10, value_type='int', update_on='release') plugin += SaveButtons() +plugin += OKCancelButtons() viewer += plugin viewer.show()