Joseph,

I"m cc-ing this to the floatcanvas mailing list;

http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas

Other people may be interested, and it's nice to have an archive of
questions and answers.

On Mon, Jan 27, 2014 at 3:48 PM, Joseph Basquin <[email protected]>wrote:

> I would like to do the following thing with FloatCanvas : place a 800x600
> .png file as full image of a wx.Panel, and auto zoom on it if the Frame is
> resized.
>


> How to do this with FloatCanvas ?
>

You need to put the image on the Canvas with a ScaledBitmap2 object (it's
more efficient than Scaledbitmap when zooming in on it...) . Then bind
EVT_SIZE to a a method that calls ZoomToBB on the Canvas. See enclosed
example -- you'll need to set the ImageFile to your image for it to work.

-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]
#!/usr/bin/env python

"""
This demo shows how to use a ScaledBitmap2 (which is like a scaled bitmap,
but uses memory more efficiently for large images and high zoom levels.)


"""

## Set a path to an Image file here:
ImageFile = "white_tank.jpg" 


import wx
import random
## import the installed version
from wx.lib.floatcanvas import NavCanvas, FloatCanvas

## import a local version
#import sys
#sys.path.append("../")
#from floatcanvas import NavCanvas, FloatCanvas

class DrawFrame(wx.Frame):

    """
    A frame used for the FloatCanvas Demo

    """

    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.CreateStatusBar()

        # Add the Canvas
        Canvas = NavCanvas.NavCanvas(self,
                                     ProjectionFun = None,
                                     BackgroundColor = "DARK SLATE BLUE",
                                     ).Canvas
        Canvas.MaxScale=20 # sets the maximum zoom level
        self.Canvas = Canvas

        FloatCanvas.EVT_MOTION(self.Canvas, self.OnMove ) 

        
        # create the image:
        image = wx.Image(ImageFile)
        self.width, self.height = image.GetSize()
        img = FloatCanvas.ScaledBitmap2( image,
                                        (0,0),
                                        Height=image.GetHeight(),
                                        Position = 'tl',
                                        )
        Canvas.AddObject(img)
        
        self.Canvas.Bind(wx.EVT_SIZE, self.OnSize)

        self.Show()
        Canvas.ZoomToBB()
    
    def OnSize(self, event):
        """
        re-zooms the canvas to fit the window

        """
        self.Canvas.ZoomToBB()
        event.Skip()

    def OnMove(self, event):
        """
        Updates the status bar with the world coordinates

        """
        self.SetStatusText("%i, %i"%tuple(event.Coords))


app = wx.App(False)
F = DrawFrame(None, title="FloatCanvas Demo App", size=(700,700) )
app.MainLoop()
    
    
    
    









_______________________________________________
FloatCanvas mailing list
[email protected]
http://mailman.paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas

Reply via email to