Nadav, You want the slider to update the value as it is moving? If so, pass update_on="move" to Slider(). I tried your example, and my view does update on key presses. I am using skimage 0.9.3 on Windows 7. import matplotlib.pyplot as pltfrom skimage import datafrom skimage import viewerfrom skimage.viewer.plugins.overlayplugin import OverlayPluginfrom skimage.viewer.widgets import Slider class Cimage(object): def __init__(self): self.recname = 'howdy' self.rgb_image = data.camera() self.gamma = 1 def key_press(self, event): self.view.image = self.view.image[::-1] def image_update(self, image, **kwargs): return image[::-1] - int(kwargs['gamma']) * 5 def create_window(self): self.view = viewer.ImageViewer(self.rgb_image) plugin = OverlayPlugin(image_filter=self.image_update) plugin += Slider('gamma', 1.0, 3.0, value=self.gamma, orientation='vertical', update_on='move') plugin += Slider('mat mix', 0.0, 1.0, value=0.0, update_on='move', orientation='vertical') plugin += Slider('wb mix', 0.0, 1.0, value=0.0, update_on='move', orientation='horizontal') self.view += plugin self.view.connect_event('key_press_event', self.key_press) self.view.setWindowTitle(self.recname) self.view.show() def main(): a = Cimage() a.create_window() if __name__ == '__main__': main() About my earlier example, you would need to call f.canvas.show instead of plt.show (I ran the code this time). But, if the MPLCanvas methods work, I’d stick with those. Cheers, Steve On Mon, Dec 23, 2013 at 8:10 AM, Nadav Horesh <nadavh.horesh@gmail.com>wrote:
Tony, I found the .connect_event method of the ImageViewer class just before I got the reply from you, and it roughly works. I say roughly because in the application there are some sliders that I added (not a part of the built-in plugins), and what I see that I see an image update only after I touch the sliders. In the linetool, however, the response is immediate.
Code snippet:
class Cimage: . . . def create_window(self): self.view = viewer.ImageViewer(self.rgb_image)
plugin = OverlayPlugin(image_filter=self.image_update) plugin += Slider('gamma', 1.0, 3.0, value=self.gamma, orientation='vertical') plugin += Slider('mat mix', 0.0, 1.0, value=0.0, update_on='move', orientation='vertical') plugin += Slider('wb mix', 0.0, 1.0, value=0.0, update_on='move', orientation='horizontal')
self.view += plugin self.view.connect_event('key_press_event', self.key_press) self.view.setWindowTitle(self.recname) self.view.show() . . . in the key_press method execution chain I have self.view.image = new_image
so the image is updated, but it does not trigger a display update.
Steve, Here is your code after some typos correction:
#! /usr/bin/python
from __future__ import print_function
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg import matplotlib.pyplot as plt from skimage import data
class MyCanvas(FigureCanvasQTAgg):
def mousePressEvent(self, event): #pass print('press') self.image = self.image[::-1]
def main(): image = data.camera() f, ax = plt.subplots() f.canvas = MyCanvas(f) ax.imshow(image, interpolation='nearest') h, w = image.shape plt.show()
if __name__ == '__main__': main()
Running it I see that the method mousePressEvent is not being called
I'll be happy to know if there is something to follow and build an application based on the viewer module.
Thank you both very much
Nadav
2013/12/23 Steven Silvester <steven.silvester@gmail.com>:
Nadav,
The canvas itself is a matplotlib.backends.backend_qt4agg.FigureCanvasQTAgg. If you wanted, you could subclass that class and provide your own mousePressEvent and friends. Something like:
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg import matplotlib.pyplot as plt from skimage import data
class MyCanvas(FigureCanvasQtAgg):
def mousePressEvent(self, event): pass
def main(): image = data.camera() f, ax = plt.subplots() f.canvas = MyCanvas() ax.imshow(image, interpolation='nearest') h, w = image.shape plt.show()
On Wednesday, December 18, 2013 2:13:02 AM UTC-6, Nadav Horesh wrote:
I I started to build an interactive image exploration utility based on matplotlib. Recently, following a link on this list, I encountered skimage.viewer, and found that the plugins architecture matches my
needs.
I could not find how to link keyboard and mouse events (and maybe buttons) to plugins. Any suggestions?
I am using version 0.93 on linux (I can install the pre 0.10, if needed)
Thanks,
Nadav
-- You received this message because you are subscribed to the Google Groups "scikit-image" group. To unsubscribe from this group and stop receiving emails from it, send an email to scikit-image+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
-- You received this message because you are subscribed to a topic in the Google Groups "scikit-image" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/scikit-image/pRZYHjAW78U/unsubscribe. To unsubscribe from this group and all of its topics, send an email to scikit-image+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
participants (1)
-
Steven Silvester