Solved, thanks a lot !
2014-03-05 0:01 GMT+01:00 Chris Barker <[email protected]>: > On Tue, Mar 4, 2014 at 1:05 PM, Nouvelle Collection < > [email protected]> wrote: > > >> Thanks for these tips, I am going to implement it that way. I will >> share the results when ready ! >> When changing Image : >> >> myelt.Image = .... # new image >> >> even if I do : >> >> self.Canvas.Draw(True) >> wx.CallAfter(self.Canvas.ZoomToBB) >> >> ... > >> But if I manually resize the window that hosts the Canvas, then the >> Canvas is redrawn, and the new Image appears. > > > Odd -- the True passed in to Draw() should force a re-draw. > > Got it -- ScaledBitmap caches the re-scaled Image, so that it doesn't need > to re-scale it at every draw -- only when the zoom is changed. That why a > Window re-size did it. > > Try: > > myelt.Image = .... # new image > myelt.ScaledBitmap = None > > That will clear the cached Image. > > I suppose I should make self.Image a property, so that that would happen > fo ryou. But teh multi-image solution is better anyway. > > -Chris > > > > > >> etc., the new image is not (re)drawn. >> >> >> How to manually ask for a redrawing of the Image, just afer >> myelt.Image = .... # new image >> ? >> >> Thank you in advance, >> >> Jo >> >> >> 2014-03-04 18:42 GMT+01:00 Chris Barker <[email protected]>: >> >>> On Tue, Mar 4, 2014 at 9:17 AM, Nouvelle Collection < >>> [email protected]> wrote: >>> >>>> Hello, >>>> (This is my last question for the week, sorry for all these mails). >>>> >>>> I would like to change the image of a ScaledBitmap when clicking on it : >>>> >>>> A = self.Canvas.AddScaledBitmap(img, (0,0), Height=img.GetHeight(), >>>> Position = 'tl') >>>> A.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.OnDown) >>>> >>>> def OnDown(self, elt): >>>> # ... >>>> # Change A's image to another bitmap >>>> >>>> *The goal is to make a ToggleButton : each click on the button would >>>> toggle between img1 and img2.* >>>> >>>> Remark : I already implemented it by doing : >>>> A_enabled = self.Canvas.AddScaledBitmap(img_ena, (0,0), >>>> Height=img_ena.GetHeight(), Position = 'tl') >>>> A_disabled = self.Canvas.AddScaledBitmap(img_dis, (0,0), >>>> Height=img_dis.GetHeight(), Position = 'tl') >>>> and then each click on both of them would *hide one of them, and show >>>> the other*... >>>> But this is a kind of dirty way to do it... >>>> >>> >>> Well, that's not so bad.... >>> >>> But the semi-"right" way to do it would be to change the Image in place: >>> >>> def OnDown(self, elt): >>> # ... >>> # Change A's image to another bitmap >>> elt.Image = the_new_image >>> >>> This should "just work", but only if: >>> the_new_image is a wx.Image object >>> it is the same size as the previous image. >>> >>> >>> But the "right" way to do it is to make a ScaledBitmap that stored two >>> images. You could subclass ScaledBitmap: >>> >>> class ToggleScaledBitmap(FloatCanvas.ScaledBitmap): >>> def__init__(self, Bitmap1, Bitmap2, *args, **kwargs): >>> >>> if type(Bitmap1) == wx._gdi.Bitmap: >>> self.Image1 = Bitmap1.ConvertToImage() >>> elif type(Bitmap) == wx._core.Image: >>> self.Image1 = Bitmap1 >>> ## repeated code -- should be cleaned up... >>> if type(Bitmap2) == wx._gdi.Bitmap: >>> self.Image2 = Bitmap1.ConvertToImage() >>> elif type(Bitmap) == wx._core.Image: >>> self.Image2 = Bitmap2 >>> >>> ## some checks in here to make sure that the two bitmaps are the >>> same size... >>> >>> FloatCanvas.ScaledBitmap.__init__(self, self.Image1, *args, >>> **kwargs) >>> >>> def ChangeBitmap(self, bitmap_num=1): >>> if bitmap_num == 1: >>> self.Image = self.Image1 >>> elif bitmap_num == 2: >>> self.Image = self.Image2 >>> else: >>> raise ValueError("bitmap_num ust be either 1 or 2") >>> >>> All untested.... >>> >>> Better yet, make it a MultiScaledBitmap, and allow the user to pass in a >>> list of Images of any length, and switch between them. >>> >>> This would be nice to add to FloatCanvas once you get it working.... >>> >>> -Chris >>> >>> >>> >>> >>> -- >>> >>> Christopher Barker, Ph.D. >>> Oceanographer >>> >>> Emergency Response Division >>> NOAA/NOS/OR&R (206) 526-6959 voice >>> 7600 Sand Point Way NE (206) 526-6329 fax >>> Seattle, WA 98115 (206) 526-6317 main reception >>> >>> [email protected] >>> >>> _______________________________________________ >>> FloatCanvas mailing list >>> [email protected] >>> http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas >>> >>> >> >> _______________________________________________ >> FloatCanvas mailing list >> [email protected] >> http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas >> >> > > > -- > > Christopher Barker, Ph.D. > Oceanographer > > Emergency Response Division > NOAA/NOS/OR&R (206) 526-6959 voice > 7600 Sand Point Way NE (206) 526-6329 fax > Seattle, WA 98115 (206) 526-6317 main reception > > [email protected] > > _______________________________________________ > FloatCanvas mailing list > [email protected] > http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas > >
_______________________________________________ FloatCanvas mailing list [email protected] http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas
