nadili wrote:
> Hi,
>
> I’m still a newbie in python (and wxpython),
> and I’m trying to create an application that basically consists on loading a
> main frame, and creating a child frame inside it (using MDI) to work with an
> image. What I need to do is to draw points in this image (for which I’m using
> floatcanvas) and store its coordinates.
> The problem I’m having is that when I draw the
> point it only shows up if I hit the “Zoom to Fit” button that comes with
> NavCanvas, and I would like for it to appear on the screen automatically.
> Another thing I wanted to do is to be able to
> erase some specific point after I have drawn it, I’m not sure how would be the
> best way to do it, so I would appreciate any suggestions.
>
> I’m attaching the code below, thanks in
> advance.
> Nadili L. Ribeiro
>
> import wx
> import os
> from floatcanvas import NavCanvas, FloatCanvas
>
> class Frame(wx.MDIParentFrame):
> def __init__(self):
>
> wx.MDIParentFrame.__init__(self, None, -1, "Main Frame",
> size=(600,400))
> self.statusbar = self.CreateStatusBar()
> menu = wx.Menu()
> menu.Append(5000, "&New Picture")
> menubar = wx.MenuBar()
> menubar.Append(menu, "&File")
> self.SetMenuBar(menubar)
> self.Bind(wx.EVT_MENU, self.OnNewPicture, id=5000)
>
>
>
> def OnNewPicture(self, evt):
>
> """creates child frame"""
> self.ChildFrame = wx.MDIChildFrame(self, -1, "Child Frame")
>
>
> """create canvas"""
> NC = NavCanvas.NavCanvas(self.ChildFrame,-1,
> size = (5000,5000),
> ProjectionFun = None,
> Debug = 0,
> BackgroundColor = "White")
> self.Canvas = NC.Canvas
>
> """load image"""
> image = wx.Image("orion.jpg")
> self.temp = image.ConvertToBitmap()
> self.Canvas.AddScaledBitmap(self.temp, (0,0), Height =
> image.GetSize()[1], Position='tl')
> self.Canvas.ZoomToBB()
> self.Show()
>
>
> class App(wx.App):
>
>
> def OnInit(self):
>
> """Load Frame"""
> self.frame = Frame()
> self.frame.Show()
> self.Bind(wx.EVT_RIGHT_DOWN, self.OnDrawDot)
> self.SetTopWindow(self.frame)
> return (True)
>
> def OnDrawDot(self, evt):
>
> mpos = evt.GetPosition()
> mposcanvas = self.frame.Canvas.PixelToWorld(mpos)
> self.frame.statusbar.SetStatusText("Pos: %s" %str(mposcanvas))
string formatting will take care of type, so you don't need the str:
self.frame.statusbar.SetStatusText("Pos: %s" % (mposcanvas))
> self.frame.Canvas.AddPoint(mposcanvas, Diameter=9, Color = "Red")
> self.frame.Show()
I think this is what you need:
self.Canvas.Draw(True)
Not sure if you will still need the .Show()
>
>
> def main():
> app = App()
> app.MainLoop()
>
> if __name__ == '__main__':
>
> main()
Carl K
_______________________________________________
FloatCanvas mailing list
[email protected]
http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas