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
