Hi Chris, 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) etc., the new image is not (re)drawn. But if I manually resize the window that hosts the Canvas, then the Canvas is redrawn, and the new Image appears. 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
